diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8ab5cca9a66..baef8fe1644 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,6 +1,13 @@
name: 'Build'
-on: push
+on:
+ push:
+ branches:
+ - dev
+ - "release*"
+ tags:
+ - '*'
+ pull_request:
env:
TARGETS: f6
@@ -58,18 +65,6 @@ jobs:
make -j$(nproc) -C bootloader TARGET=${TARGET}
done
- - name: 'Generate dfu file for bootloader'
- uses: ./.github/actions/docker
- with:
- run: |
- for TARGET in ${TARGETS}
- do
- hex2dfu \
- -i bootloader/.obj/${TARGET}/bootloader.hex \
- -o bootloader/.obj/${TARGET}/bootloader.dfu \
- -l "Flipper Zero $(echo $TARGET | tr a-z A-Z)"
- done
-
- name: 'Build firmware in docker'
uses: ./.github/actions/docker
with:
@@ -79,19 +74,8 @@ jobs:
make -j$(nproc) -C firmware TARGET=${TARGET}
done
- - name: 'Generate dfu file for firmware'
- uses: ./.github/actions/docker
- with:
- run: |
- for TARGET in ${TARGETS}
- do
- hex2dfu \
- -i firmware/.obj/${TARGET}/firmware.hex \
- -o firmware/.obj/${TARGET}/firmware.dfu \
- -l "Flipper Zero $(echo $TARGET | tr a-z A-Z)"
- done
-
- name: 'Generate full hex file'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
uses: ./.github/actions/docker
with:
run: |
@@ -104,6 +88,7 @@ jobs:
done
- name: 'Move upload files'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
uses: ./.github/actions/docker
with:
run: |
@@ -124,6 +109,7 @@ jobs:
done
- name: 'Generate full dfu file'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
uses: ./.github/actions/docker
with:
run: |
@@ -136,6 +122,7 @@ jobs:
done
- name: 'Full flash asssembly: bootloader as base'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
run: |
for TARGET in ${TARGETS}
do
@@ -145,13 +132,15 @@ jobs:
done
- name: 'Full flash asssembly: bootloader padding'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
run: |
for TARGET in ${TARGETS}
do
truncate -s 32768 artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin
done
-
+
- name: 'Full flash asssembly: append firmware'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
run: |
for TARGET in ${TARGETS}
do
@@ -160,7 +149,31 @@ jobs:
>> artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin
done
+ - name: 'Bundle core2 firmware'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
+ run: |
+ test -d core2_firmware && rm -rf core2_firmware || true
+ mkdir core2_firmware
+ cp \
+ lib/STM32CubeWB/package.xml \
+ lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.bin \
+ lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_for_fus_0_5_3.bin \
+ lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.bin \
+ core2_firmware
+ tar czpf artifacts/flipper-z-any-core2_firmware-${SUFFIX}.tgz core2_firmware
+
+ - name: 'Bundle scripts'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
+ run: |
+ tar czpf artifacts/flipper-z-any-scripts-${SUFFIX}.tgz scripts
+
+ - name: 'Bundle resources'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
+ run: |
+ tar czpf artifacts/flipper-z-any-resources-${SUFFIX}.tgz -C assets resources
+
- name: 'Upload artifacts to update server'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
uses: burnett01/rsync-deployments@4.1
with:
switches: -avzP --delete
@@ -172,6 +185,7 @@ jobs:
remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
- name: 'Trigger update server reindex'
+ if: ${{ !github.event.pull_request.head.repo.fork }}
uses: wei/curl@master
with:
args: -X POST -F 'key=${{ secrets.REINDEX_KEY }}' ${{ secrets.REINDEX_URL }}
diff --git a/.github/workflows/build_toolchain.yml b/.github/workflows/build_toolchain.yml
new file mode 100644
index 00000000000..2068730c1dd
--- /dev/null
+++ b/.github/workflows/build_toolchain.yml
@@ -0,0 +1,46 @@
+name: 'Build toolchain Docker image'
+
+on:
+ push:
+ branches:
+ - dev
+ tags:
+ - '*'
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v3
+ with:
+ images: flipperdevices/flipperzero-toolchain
+ flavor: latest=${{ startsWith(github.ref, 'refs/tags/') && !endsWith(github.ref, 'rc')}}
+ tags: |
+ type=ref,event=branch
+ type=ref,event=tag
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+ - name: Login to DockerHub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Build and push
+ id: docker_build
+ uses: docker/build-push-action@v2
+ with:
+ context: docker/
+ push: true
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
+ platforms: linux/amd64,linux/arm64
+ cache-from: type=registry,ref=flipperdevices/flipperzero-toolchain:buildcache
+ cache-to: type=registry,ref=flipperdevices/flipperzero-toolchain:buildcache,mode=max
\ No newline at end of file
diff --git a/.github/workflows/lint_c.yml b/.github/workflows/lint_c.yml
index 39a7eabe05d..828a7f702aa 100644
--- a/.github/workflows/lint_c.yml
+++ b/.github/workflows/lint_c.yml
@@ -1,6 +1,13 @@
name: 'Lint C/C++ with clang-format'
-on: pull_request
+on:
+ push:
+ branches:
+ - dev
+ - "release*"
+ tags:
+ - '*'
+ pull_request:
env:
TARGETS: f6
@@ -37,7 +44,19 @@ jobs:
uses: ./.github/actions/docker
- name: 'Check syntax'
+ id: syntax_check
uses: ./.github/actions/docker
- continue-on-error: false
with:
- run: /syntax_check.sh
+ run: SET_GH_OUTPUT=1 /syntax_check.sh
+
+ - name: Report syntax errors
+ if: failure() && steps.syntax_check.outputs.errors && github.event.pull_request
+ uses: peter-evans/create-or-update-comment@v1
+ with:
+ issue-number: ${{ github.event.pull_request.number }}
+ body: |
+ Please fix following syntax errors:
+ ```
+ ${{ steps.syntax_check.outputs.errors }}
+ ```
+ You might want to run `docker compose exec dev /syntax_check.sh` for an auto-fix.
\ No newline at end of file
diff --git a/.github/workflows/lint_python.yml b/.github/workflows/lint_python.yml
index 4a70d48b000..e665378b167 100644
--- a/.github/workflows/lint_python.yml
+++ b/.github/workflows/lint_python.yml
@@ -1,6 +1,13 @@
name: 'Python Lint'
-on: pull_request
+on:
+ push:
+ branches:
+ - dev
+ - "release*"
+ tags:
+ - '*'
+ pull_request:
jobs:
lint_python:
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000000..f288702d2fa
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ 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
+.
diff --git a/ReadMe.md b/ReadMe.md
index 07e1368928b..5e0fd381728 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -1,16 +1,15 @@
-# Flipper Zero Firmware community repo
+# Flipper Zero Firmware
[![Discord](https://img.shields.io/discord/740930220399525928.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](http://flipperzero.one/discord)
-
+![Show me the code](https://habrastorage.org/webt/eo/m0/e4/eom0e4btudte7nrhnyic-laiog0.png)
Welcome to [Flipper Zero](https://flipperzero.one/)'s Firmware repo!
-Our goal is to create nice and clean code along with good documentation, to make it a pleasure for everyone to work with.
-This repo will become completely public closer to the device shipping date.
+Our goal is to create nice and clean code with good documentation, to make it a pleasure for everyone to work with.
# Update firmware
-Get Latest Firmware from Update Server
+[Get Latest Firmware from Update Server](https://update.flipperzero.one/)
Flipper Zero's firmware consists of three components:
@@ -27,7 +26,7 @@ All 3 of them must be flashed in order described.
Prerequisites:
-- Linux / MacOs
+- Linux / macOS
- Terminal
- STM32_Programmer_CLI added to $PATH
@@ -37,9 +36,9 @@ One liner: `./flash_core2_ble.sh`
Prerequisites:
-- Linux / MacOs
+- Linux / macOS
- Terminal
-- Arm gcc noneabi
+- [arm-gcc-none-eabi](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads)
- openocd
One liner: `./flash_core1_main.sh`
@@ -52,81 +51,138 @@ One liner: `./flash_core1_main.sh`
- Press and hold `← Left` + `↩ Back` for reset
- Release `← Left` and keep holding `↩ Back` until blue LED lights up
- Release `↩ Back`
-
+![Switch to DFU sequence](https://habrastorage.org/webt/uu/c3/g2/uuc3g2n36f2sju19rskcvjzjf6w.png)
1. Run `dfu-util -D full.dfu -a 0`
# Build from source
-`docker-compose exec dev make -C firmware flash` for build and flash dev board (see `applications/applications.mk` for list of applications/examples)
+## Prerequisites
+
+1. Install [Docker Engine and Docker Compose](https://www.docker.com/get-started)
+2. Clone the repo:
+ ```sh
+ git clone https://github.com/flipperdevices/flipperzero-firmware
+ cd flipperzero-firmware
+ ```
+3. Prepare the container:
+ ```sh
+ docker compose up -d
+ ```
+
+## Compile bootloader
+
+```sh
+docker compose exec dev make -j$(nproc) -C bootloader TARGET=f6
+```
+
+Bootloader compilation results:
+* `bootloader/.obj/f6/bootloader.elf`
+* `bootloader/.obj/f6/bootloader.hex`
+* `bootloader/.obj/f6/bootloader.bin`
+* **`bootloader/.obj/f6/bootloader.dfu`** - should be used to flash
+
+## Compile firmware
+
+```sh
+docker compose exec dev make -j$(nproc) -C firmware TARGET=f6
+```
+
+Firmware compilation results:
+* `firmware/.obj/f6/firmware.elf`
+* `firmware/.obj/f6/firmware.hex`
+* `firmware/.obj/f6/firmware.bin`
+* **`firmware/.obj/f6/firmware.dfu`** - should be used to flash
+
+## Concatenate bootloader and firmware
+
+You might want to do this to distribute the firmware as a single file.
+
+That's exactly how we generate our `full` builds.
+
+1. Concatenate HEX files:
+ ```sh
+ docker compose exec dev srec_cat \
+ bootloader/.obj/f6/bootloader.hex -Intel \
+ firmware/.obj/f6/firmware.hex -Intel \
+ -o firmware/.obj/f6/full.hex -Intel
+ ```
+2. Convert HEX to DFU:
+ ```sh
+ docker compose exec dev hex2dfu \
+ -i firmware/.obj/f6/full.hex \
+ -o firmware/.obj/f6/full.dfu \
+ -l "Flipper Zero F6"
+ ```
+
+Finally, you will have **`firmware/.obj/f6/full.dfu`** file that can be distributed and flashed.
# Links
-* Task tracker: [Jira](https://flipperzero.atlassian.net/)
-* Discord server: [flipperzero.one/discord](https://flipperzero.one/discord)
-* Project website: [flipperzero.one](https://flipperzero.one)
+* Discord: [flipp.dev/discord](https://flipp.dev/discord)
+* Website: [flipperzero.one](https://flipperzero.one)
* Kickstarter page: [kickstarter.com](https://www.kickstarter.com/projects/flipper-devices/flipper-zero-tamagochi-for-hackers)
* Forum: [forum.flipperzero.one](https://forum.flipperzero.one/)
# Folders structure
- applications - application and services
- * accessor - Wiegand server
- * archive - Archive and file manager
- * bt - BLE service and application
- * cli - Console service
- * debug_tools - different tools that we use on factory and for debug
- * dialogs - service for showing GUI dialogs
- * dolphin - dolphin service and supplientary apps
- * gpio-tester - GPIO control application
- * gui - GUI service
- * ibutton - ibutton application, onewire keys and more
- * input - input service
- * irda - irda application, controls your IR devices
- * irda_monitor - irda debug tool
- * lfrfid - LF RFID application
- * lfrfid-debug - LF RFID debug tool
- * loader - application loader service
- * menu - main menu service
- * music-player - music player app (demo)
- * nfc - NFC application, HF rfid, EMV and etc
- * notification - notification service
- * power - power service
- * power-observer - power debug tool
- * scened-app-example - c++ application example
- * storage - storage service, internal + sdcard
- * storage-settings - storage settings app
- * subghz - subghz application, 433 fobs and etc
- * tests - unit tests and etc
+ * accessor - Wiegand server
+ * archive - Archive and file manager
+ * bt - BLE service and application
+ * cli - Console service
+ * debug_tools - different tools that we use on factory and for debug
+ * dialogs - service for showing GUI dialogs
+ * dolphin - dolphin service and supplientary apps
+ * gpio-tester - GPIO control application
+ * gui - GUI service
+ * ibutton - ibutton application, onewire keys and more
+ * input - input service
+ * irda - irda application, controls your IR devices
+ * irda_monitor - irda debug tool
+ * lfrfid - LF RFID application
+ * lfrfid-debug - LF RFID debug tool
+ * loader - application loader service
+ * menu - main menu service
+ * music-player - music player app (demo)
+ * nfc - NFC application, HF rfid, EMV and etc
+ * notification - notification service
+ * power - power service
+ * power-observer - power debug tool
+ * scened-app-example - c++ application example
+ * storage - storage service, internal + sdcard
+ * storage-settings - storage settings app
+ * subghz - subghz application, 433 fobs and etc
+ * tests - unit tests and etc
- assets - assets used by applications and services
- * compiled - compilation results
- * icons - source icons images
+ * compiled - compilation results
+ * icons - source icons images
- bootloader - bootloader for flipper
- * src - bootloader sources
- * targets - targets' hal and implementation
+ * src - bootloader sources
+ * targets - targets' hal and implementation
- core - core libraries: home for furi
- debug - debug helpers, plugins and tools
- docker - docker image sources (used for automated firmware build)
- firmware - firmware for flipper
- * targets - targets' hal and implementation
+ * targets - targets' hal and implementation
- lib - different libraries and drivers that apps and firmware uses
- * ST25RFAL002 - ST253916 driver and NFC hal
- * STM32CubeWB - STM32WB hal
- * app-scened-template - scened template app library
- * app-template - template app library
- * callback-connector - callback connector library
- * common-api - common api delaration library
- * cyfral - cyfral library
- * drivers - drivers that we wrote
- * fatfs - external storage file system
- * fnv1a-hash - fnv1a hash library
- * irda - irda library
- * littlefs - internal storage file system
- * mlib - algorithms and containers
- * nfc_protocols - nfc protocols library
- * onewire - one wire library
- * qrcode - qr code generator library
- * subghz - subghz library
- * toolbox - toolbox of things that we are using but don't place in core
- * u8g2 - graphics library that we use to draw GUI
+ * ST25RFAL002 - ST253916 driver and NFC hal
+ * STM32CubeWB - STM32WB hal
+ * app-scened-template - scened template app library
+ * app-template - template app library
+ * callback-connector - callback connector library
+ * common-api - common api delaration library
+ * cyfral - cyfral library
+ * drivers - drivers that we wrote
+ * fatfs - external storage file system
+ * fnv1a-hash - fnv1a hash library
+ * irda - irda library
+ * littlefs - internal storage file system
+ * mlib - algorithms and containers
+ * nfc_protocols - nfc protocols library
+ * onewire - one wire library
+ * qrcode - qr code generator library
+ * subghz - subghz library
+ * toolbox - toolbox of things that we are using but don't place in core
+ * u8g2 - graphics library that we use to draw GUI
- make - make helpers
- scripts - supplimentary scripts
diff --git a/applications/applications.c b/applications/applications.c
index a36ac4863b5..786b8f35713 100644
--- a/applications/applications.c
+++ b/applications/applications.c
@@ -28,9 +28,6 @@ extern int32_t keypad_test_app(void* p);
extern int32_t lfrfid_app(void* p);
extern int32_t lfrfid_debug_app(void* p);
extern int32_t nfc_app(void* p);
-extern int32_t passport_app(void* p);
-extern int32_t food_minigame_app(void* p);
-extern int32_t scene_app(void* p);
extern int32_t scened_app(void* p);
extern int32_t storage_test_app(void* p);
extern int32_t subghz_app(void* p);
@@ -248,19 +245,6 @@ const FlipperApplication FLIPPER_ARCHIVE =
{.app = archive_app, .name = "Archive", .stack_size = 4096, .icon = &A_FileManager_14};
#endif
-#ifdef SRV_DOLPHIN
-const FlipperApplication FLIPPER_SCENE =
- {.app = scene_app, .name = "Scenes", .stack_size = 1024, .icon = &A_Games_14};
-
-const FlipperApplication FLIPPER_SCENE_APPS[] = {
- {.app = passport_app, .name = "Passport", .stack_size = 1024, .icon = &A_Games_14},
- {.app = food_minigame_app, .name = "Food minigame", .stack_size = 1024, .icon = &A_Games_14},
-};
-
-const size_t FLIPPER_SCENE_APPS_COUNT = sizeof(FLIPPER_SCENE_APPS) / sizeof(FlipperApplication);
-
-#endif
-
// Settings menu
const FlipperApplication FLIPPER_SETTINGS_APPS[] = {
#ifdef SRV_NOTIFICATION
diff --git a/applications/dolphin/dolphin.c b/applications/dolphin/dolphin.c
index 705ed80867e..cdcef27e8bf 100644
--- a/applications/dolphin/dolphin.c
+++ b/applications/dolphin/dolphin.c
@@ -10,9 +10,15 @@ static void dolphin_switch_to_app(Dolphin* dolphin, const FlipperApplication* fl
furi_assert(flipper_app->app);
furi_assert(flipper_app->name);
+ if(furi_thread_get_state(dolphin->scene_thread) != FuriThreadStateStopped) {
+ FURI_LOG_E("Dolphin", "Thread is already running");
+ return;
+ }
+
furi_thread_set_name(dolphin->scene_thread, flipper_app->name);
furi_thread_set_stack_size(dolphin->scene_thread, flipper_app->stack_size);
furi_thread_set_callback(dolphin->scene_thread, flipper_app->app);
+
furi_thread_start(dolphin->scene_thread);
}
@@ -117,14 +123,8 @@ bool dolphin_view_idle_main_input(InputEvent* event, void* context) {
with_value_mutex(
dolphin->menu_vm, (Menu * menu) { menu_ok(menu); });
} else if(event->key == InputKeyUp && event->type == InputTypeShort) {
- osTimerStart(dolphin->timeout_timer, 40);
+ osTimerStart(dolphin->timeout_timer, 64);
view_dispatcher_switch_to_view(dolphin->idle_view_dispatcher, DolphinViewLockMenu);
- } else if(event->key == InputKeyLeft && event->type == InputTypeShort) {
-#if 0
- dolphin_switch_to_app(dolphin, &FAV_APP);
-#endif
- } else if(event->key == InputKeyRight && event->type == InputTypeShort) {
- dolphin_switch_to_app(dolphin, &FLIPPER_SCENE);
} else if(event->key == InputKeyDown && event->type == InputTypeShort) {
dolphin_switch_to_app(dolphin, &FLIPPER_ARCHIVE);
} else if(event->key == InputKeyDown && event->type == InputTypeLong) {
@@ -180,6 +180,12 @@ static void lock_menu_callback(void* context, uint8_t index) {
break;
default:
+ // wip message
+ with_view_model(
+ dolphin->view_lockmenu, (DolphinViewLockMenuModel * model) {
+ model->hint_timeout = HINT_TIMEOUT_H;
+ return true;
+ });
break;
}
}
@@ -199,6 +205,8 @@ bool dolphin_view_lockmenu_input(InputEvent* event, void* context) {
DolphinViewLockMenuModel* model = view_get_model(dolphin->view_lockmenu);
+ model->hint_timeout = 0; // clear hint timeout
+
if(event->key == InputKeyUp) {
model->idx = CLAMP(model->idx - 1, 2, 0);
} else if(event->key == InputKeyDown) {
diff --git a/applications/dolphin/dolphin_i.h b/applications/dolphin/dolphin_i.h
index 3f47e2c385c..cd562492172 100644
--- a/applications/dolphin/dolphin_i.h
+++ b/applications/dolphin/dolphin_i.h
@@ -46,8 +46,6 @@ struct Dolphin {
View* idle_view_first_start;
View* idle_view_main;
View* idle_view_dolphin_stats;
- View* idle_view_down;
- View* idle_view_meta;
View* view_hw_mismatch;
View* view_lockmenu;
ViewPort* lock_viewport;
diff --git a/applications/dolphin/dolphin_views.c b/applications/dolphin/dolphin_views.c
index 8953fe3ad5f..953671e73a3 100644
--- a/applications/dolphin/dolphin_views.c
+++ b/applications/dolphin/dolphin_views.c
@@ -63,7 +63,7 @@ void dolphin_view_idle_main_draw(Canvas* canvas, void* model) {
canvas_draw_icon_animation(canvas, 0, -3, m->animation);
}
- if(m->hint_timeout > 0) {
+ if(m->hint_timeout) {
m->hint_timeout--;
if(m->locked) {
canvas_draw_icon(canvas, 13, 5, &I_LockPopup_100x49);
@@ -98,10 +98,19 @@ void dolphin_view_lockmenu_draw(Canvas* canvas, void* model) {
if(m->door_left_x == -57) {
for(uint8_t i = 0; i < 3; ++i) {
canvas_draw_str_aligned(
- canvas, 64, 13 + (i * 17), AlignCenter, AlignCenter, Lockmenu_Items[i]);
+ canvas,
+ 64,
+ 13 + (i * 17),
+ AlignCenter,
+ AlignCenter,
+ (m->hint_timeout && m->idx == i) ? "Not implemented" : Lockmenu_Items[i]);
if(m->idx == i) elements_frame(canvas, 15, 5 + (i * 17), 98, 15);
}
}
+
+ if(m->hint_timeout) {
+ m->hint_timeout--;
+ }
}
}
diff --git a/applications/dolphin/dolphin_views.h b/applications/dolphin/dolphin_views.h
index 8987d8294f6..2f91b69a6c5 100644
--- a/applications/dolphin/dolphin_views.h
+++ b/applications/dolphin/dolphin_views.h
@@ -41,6 +41,8 @@ typedef struct {
int8_t door_left_x;
int8_t door_right_x;
uint8_t exit_timeout;
+ uint8_t hint_timeout;
+
bool locked;
} DolphinViewLockMenuModel;
diff --git a/applications/dolphin/games/food.c b/applications/dolphin/games/food.c
deleted file mode 100644
index ea35b6d87ee..00000000000
--- a/applications/dolphin/games/food.c
+++ /dev/null
@@ -1,321 +0,0 @@
-#include
-#include
-#include "dolphin/dolphin_state.h"
-
-#define MAX_TRIES 3
-#define DISHES_TOTAL 3
-#define LID_POS_MAX 20
-#define TRY_TIMEOUT 10
-
-typedef enum {
- EventTypeTick,
- EventTypeKey,
- EventTypeDeed,
-} EventType;
-
-typedef struct {
- union {
- InputEvent input;
- } value;
- EventType type;
-} AppEvent;
-
-typedef enum {
- PlayerChoiceEvent,
- OpenLootEvent,
- WinEvent,
- LooseEvent,
- FinishedEvent,
- ExitGameEvent,
- GameEventTotal,
-} GameEventType;
-
-typedef enum {
- LootSkeleton,
- LootFish,
- LootShit,
- LootTotalNum,
-} LootIdEnum;
-
-typedef struct {
- GameEventType current_event;
- osMessageQueueId_t event_queue;
- LootIdEnum loot_list[DISHES_TOTAL];
-
- uint8_t cursor_pos;
- uint8_t lid_pos;
- uint8_t timeout;
- uint8_t try;
-
- bool selected;
- bool deed;
-
-} GameState;
-
-typedef struct {
- const Icon* f;
- const Icon* b;
-} LootGfx;
-
-static const Icon* letters[DISHES_TOTAL] = {&I_letterA_10x10, &I_letterB_10x10, &I_letterC_10x10};
-
-static const LootGfx loot[LootTotalNum] = {
- [LootSkeleton] =
- {
- .f = &I_skeleton_25x17,
- .b = &I_blackskeleton_25x17,
- },
- [LootFish] =
- {
- .f = &I_fish_25x17,
- .b = &I_blackfish_25x17,
- },
- [LootShit] =
- {
- .f = &I_shit_25x17,
- .b = &I_blackshit_25x17,
- },
-};
-
-static void input_callback(InputEvent* input_event, void* ctx) {
- osMessageQueueId_t event_queue = ctx;
- AppEvent event;
- event.type = EventTypeKey;
- event.value.input = *input_event;
- osMessageQueuePut(event_queue, &event, 0, osWaitForever);
-}
-
-static void draw_dish(Canvas* canvas, GameState* state, uint8_t x, uint8_t y, uint8_t id) {
- bool active = state->cursor_pos == id;
- bool opened = state->current_event == OpenLootEvent && active;
-
- canvas_set_bitmap_mode(canvas, true);
- canvas_set_color(canvas, ColorBlack);
-
- if(active) {
- canvas_draw_icon(canvas, x, y, &I_active_plate_48x18);
- }
-
- if(opened) {
- state->lid_pos = CLAMP(state->lid_pos + 1, LID_POS_MAX, 0);
- }
-
- uint8_t lid_pos = (y - 17) - (opened ? state->lid_pos : 0);
-
- canvas_draw_icon(canvas, x + 3, y - 6, &I_plate_42x19);
-
- canvas_set_color(canvas, ColorWhite);
- canvas_draw_icon(canvas, x + 11, y - 10, loot[state->loot_list[id]].b);
- canvas_set_color(canvas, ColorBlack);
- canvas_draw_icon(canvas, x + 11, y - 10, loot[state->loot_list[id]].f);
-
- canvas_set_color(canvas, ColorWhite);
- canvas_draw_icon(canvas, x + 6, lid_pos, &I_blacklid_36x27);
- canvas_set_color(canvas, ColorBlack);
- canvas_draw_icon(canvas, x + 6, lid_pos, &I_lid_36x27);
- canvas_set_bitmap_mode(canvas, false);
-
- canvas_draw_icon(canvas, x + 19, y + 8, letters[id]);
-}
-
-static void draw_dishes_scene(Canvas* canvas, GameState* state) {
- uint8_t tries_left = MAX_TRIES - state->try;
- for(size_t i = 0; i < MAX_TRIES; i++) {
- if(i < tries_left) {
- canvas_draw_disc(canvas, 5 + i * 8, 5, 2);
- } else {
- canvas_draw_circle(canvas, 5 + i * 8, 5, 2);
- }
- }
-
- for(size_t i = 0; i < DISHES_TOTAL; i++) {
- draw_dish(canvas, state, i * 40, i % 2 ? 26 : 44, i);
- }
-}
-
-static void render_callback(Canvas* canvas, void* ctx) {
- GameState* state = (GameState*)acquire_mutex((ValueMutex*)ctx, 25);
- canvas_clear(canvas);
-
- switch(state->current_event) {
- case WinEvent:
- canvas_draw_str(canvas, 30, 30, "Dolphin_happy.png");
- break;
- case LooseEvent:
- canvas_draw_str_aligned(canvas, 64, 30, AlignCenter, AlignCenter, "Try again!");
- break;
- case ExitGameEvent:
- break;
- case FinishedEvent:
- break;
- default:
- draw_dishes_scene(canvas, state);
- break;
- }
-
- release_mutex((ValueMutex*)ctx, state);
-}
-static void reset_lid_pos(GameState* state) {
- state->selected = false;
- state->lid_pos = 0;
-}
-
-void dolphin_food_deed(GameState* state) {
- furi_assert(state);
- AppEvent event;
- event.type = EventTypeDeed;
- furi_check(osMessageQueuePut(state->event_queue, &event, 0, osWaitForever) == osOK);
-}
-
-static void reset_loot_array(GameState* state) {
- for(size_t i = 0; i < LootTotalNum; i++) {
- state->loot_list[i] = i;
- }
-
- for(size_t i = 0; i < LootTotalNum; i++) {
- int temp = state->loot_list[i];
- int r_idx = rand() % LootTotalNum;
-
- state->loot_list[i] = state->loot_list[r_idx];
- state->loot_list[r_idx] = temp;
- }
-}
-
-static bool selected_is_food(GameState* state) {
- return state->loot_list[state->cursor_pos] == LootFish;
-}
-
-static bool tries_exceed(GameState* state) {
- return state->try == MAX_TRIES;
-}
-
-static bool timeout_exceed(GameState* state) {
- return state->timeout == TRY_TIMEOUT;
-}
-
-static void gamestate_update(GameState* state, DolphinState* dolphin_state) {
- switch(state->current_event) {
- case PlayerChoiceEvent:
- if(state->selected) {
- state->current_event = OpenLootEvent;
- }
- break;
- case OpenLootEvent:
- state->timeout = CLAMP(state->timeout + 1, TRY_TIMEOUT, 0);
- if(timeout_exceed(state)) {
- state->timeout = 0;
- state->current_event = selected_is_food(state) ? WinEvent : LooseEvent;
- state->deed = selected_is_food(state);
- }
- break;
- case LooseEvent:
- state->timeout = CLAMP(state->timeout + 1, TRY_TIMEOUT, 0);
- if(timeout_exceed(state)) {
- state->timeout = 0;
- state->current_event = FinishedEvent;
- }
- break;
- case WinEvent:
- if(state->deed) {
- dolphin_food_deed(state);
- }
- break;
- case FinishedEvent:
- reset_lid_pos(state);
- reset_loot_array(state);
-
- state->try++;
- state->current_event = tries_exceed(state) ? ExitGameEvent : PlayerChoiceEvent;
- break;
-
- default:
- break;
- }
-}
-
-static void food_minigame_controls(GameState* state, AppEvent* event) {
- furi_assert(state);
- furi_assert(event);
-
- if(event->value.input.key == InputKeyRight) {
- if(state->current_event == PlayerChoiceEvent) {
- state->cursor_pos = CLAMP(state->cursor_pos + 1, DISHES_TOTAL - 1, 0);
- }
- } else if(event->value.input.key == InputKeyLeft) {
- if(state->current_event == PlayerChoiceEvent) {
- state->cursor_pos = CLAMP(state->cursor_pos - 1, DISHES_TOTAL - 1, 0);
- }
- } else if(event->value.input.key == InputKeyOk) {
- switch(state->current_event) {
- case PlayerChoiceEvent:
- state->selected = true;
- break;
- case WinEvent:
- state->current_event = FinishedEvent;
- break;
- default:
- break;
- }
- }
-}
-
-int32_t food_minigame_app(void* p) {
- GameState* state = furi_alloc(sizeof(GameState));
- DolphinState* dolphin_state = dolphin_state_alloc();
- dolphin_state_load(dolphin_state);
-
- ValueMutex state_mutex;
-
- state->event_queue = osMessageQueueNew(2, sizeof(AppEvent), NULL);
-
- furi_check(state->event_queue);
-
- if(!init_mutex(&state_mutex, state, sizeof(GameState*))) {
- printf("[Food minigame] cannot create mutex\r\n");
- return 0;
- }
-
- ViewPort* view_port = view_port_alloc();
-
- view_port_draw_callback_set(view_port, render_callback, &state_mutex);
- view_port_input_callback_set(view_port, input_callback, state->event_queue);
-
- Gui* gui = furi_record_open("gui");
- gui_add_view_port(gui, view_port, GuiLayerFullscreen);
-
- reset_loot_array(state);
-
- AppEvent event;
- while(1) {
- osStatus_t event_status = osMessageQueueGet(state->event_queue, &event, NULL, 100);
- if(event_status == osOK) {
- if(event.type == EventTypeKey && event.value.input.type == InputTypeShort) {
- food_minigame_controls(state, &event);
-
- if(event.value.input.key == InputKeyBack) {
- break;
- }
- } else if(event.type == EventTypeDeed) {
- dolphin_state_on_deed(dolphin_state, DolphinDeedIButtonRead);
- dolphin_state_save(dolphin_state);
- state->deed = false;
- }
- }
-
- if(state->current_event == ExitGameEvent) {
- break;
- }
- gamestate_update(state, dolphin_state);
- view_port_update(view_port);
- }
-
- gui_remove_view_port(gui, view_port);
- view_port_free(view_port);
- furi_record_close("gui");
- delete_mutex(&state_mutex);
- osMessageQueueDelete(state->event_queue);
- dolphin_state_free(dolphin_state);
- free(state);
-
- return 0;
-}
diff --git a/applications/dolphin/passport/passport.c b/applications/dolphin/passport/passport.c
deleted file mode 100644
index de4b1966891..00000000000
--- a/applications/dolphin/passport/passport.c
+++ /dev/null
@@ -1,147 +0,0 @@
-#include
-#include
-#include
-#include "dolphin/dolphin.h"
-#include "dolphin/dolphin_state.h"
-#include "math.h"
-
-#define MOODS_TOTAL 3
-#define BUTTHURT_MAX 3
-
-typedef enum {
- EventTypeTick,
- EventTypeKey,
-} EventType;
-
-typedef struct {
- union {
- InputEvent input;
- } value;
- EventType type;
-} AppEvent;
-
-// Moods, corresponding to butthurt level. (temp, unclear about max level)
-static const char* mood_strings[MOODS_TOTAL] = {[0] = "Happy", [1] = "Ok", [2] = "Bad"};
-
-static const Icon* portrait_happy[BUTTHURT_MAX] = {
- &I_passport_happy1_43x45,
- &I_passport_happy2_43x45,
- &I_passport_happy3_43x45};
-static const Icon* portrait_ok[BUTTHURT_MAX] = {
- &I_passport_okay1_43x45,
- &I_passport_okay2_43x45,
- &I_passport_okay3_43x45};
-static const Icon* portrait_bad[BUTTHURT_MAX] = {
- &I_passport_bad1_43x45,
- &I_passport_bad2_43x45,
- &I_passport_bad3_43x45};
-static const Icon** portraits[MOODS_TOTAL] = {portrait_happy, portrait_ok, portrait_bad};
-
-static void input_callback(InputEvent* input_event, void* ctx) {
- osMessageQueueId_t event_queue = ctx;
- AppEvent event;
- event.type = EventTypeKey;
- event.value.input = *input_event;
- osMessageQueuePut(event_queue, &event, 0, osWaitForever);
-}
-
-static void render_callback(Canvas* canvas, void* ctx) {
- DolphinState* state = (DolphinState*)acquire_mutex((ValueMutex*)ctx, 25);
-
- char level[20];
- char mood[32];
-
- uint32_t butthurt = CLAMP(dolphin_state_get_butthurt(state), BUTTHURT_MAX - 1, 0);
- uint32_t current_level = dolphin_state_get_level(state);
- uint32_t prev_cap = dolphin_state_xp_to_levelup(state, current_level - 1, false);
- uint32_t exp = (dolphin_state_xp_to_levelup(state, current_level, true) * 63) /
- (dolphin_state_xp_to_levelup(state, current_level, false) - prev_cap);
- uint8_t portrait_level = CLAMP(floor(current_level / 14), MOODS_TOTAL - 1, 0);
-
- canvas_clear(canvas);
-
- // multipass
- canvas_draw_icon(canvas, 0, 0, &I_PassportLeft_6x47);
- canvas_draw_icon(canvas, 0, 47, &I_PassportBottom_128x17);
- canvas_draw_line(canvas, 6, 0, 125, 0);
- canvas_draw_line(canvas, 127, 2, 127, 47);
- canvas_draw_dot(canvas, 126, 1);
-
- //portrait frame
- canvas_draw_line(canvas, 9, 6, 9, 53);
- canvas_draw_line(canvas, 10, 5, 52, 5);
- canvas_draw_line(canvas, 55, 8, 55, 53);
- canvas_draw_line(canvas, 10, 54, 54, 54);
- canvas_draw_line(canvas, 53, 5, 55, 7);
-
- // portrait
- canvas_draw_icon(canvas, 10, 9, portraits[butthurt][portrait_level]);
- canvas_draw_line(canvas, 59, 18, 124, 18);
- canvas_draw_line(canvas, 59, 31, 124, 31);
- canvas_draw_line(canvas, 59, 44, 124, 44);
-
- const char* my_name = furi_hal_version_get_name_ptr();
- canvas_draw_str(canvas, 59, 15, my_name ? my_name : "Unknown");
-
- snprintf(level, 20, "Level: %ld", current_level);
- snprintf(mood, 20, "Mood: %s", mood_strings[butthurt]);
-
- canvas_draw_str(canvas, 59, 28, mood);
-
- canvas_draw_str(canvas, 59, 41, level);
- canvas_set_color(canvas, ColorWhite);
- canvas_draw_box(canvas, 123 - exp, 48, exp + 1, 6);
- canvas_set_color(canvas, ColorBlack);
- canvas_draw_line(canvas, 123 - exp, 48, 123 - exp, 54);
-
- release_mutex((ValueMutex*)ctx, state);
-}
-
-int32_t passport_app(void* p) {
- DolphinState* dolphin_state = dolphin_state_alloc();
- ValueMutex state_mutex;
- dolphin_state_load(dolphin_state);
-
- osMessageQueueId_t event_queue = osMessageQueueNew(2, sizeof(AppEvent), NULL);
- furi_check(event_queue);
-
- if(!init_mutex(&state_mutex, dolphin_state, sizeof(DolphinState*))) {
- printf("[Passport] cannot create mutex\r\n");
- return 0;
- }
-
- ViewPort* view_port = view_port_alloc();
-
- view_port_draw_callback_set(view_port, render_callback, &state_mutex);
- view_port_input_callback_set(view_port, input_callback, event_queue);
-
- Gui* gui = furi_record_open("gui");
- gui_add_view_port(gui, view_port, GuiLayerFullscreen);
-
- AppEvent event;
- while(1) {
- osStatus_t event_status = osMessageQueueGet(event_queue, &event, NULL, 25);
- if(event_status == osOK) {
- if(event.type == EventTypeKey && event.value.input.type == InputTypeShort &&
- event.value.input.key == InputKeyBack) {
- break;
- }
- }
-
- view_port_update(view_port);
- }
-
- gui_remove_view_port(gui, view_port);
-
- view_port_free(view_port);
-
- furi_record_close("gui");
-
- delete_mutex(&state_mutex);
-
- osMessageQueueDelete(event_queue);
-
- dolphin_state_free(dolphin_state);
-
- return 0;
-}
diff --git a/applications/dolphin/scenes/assets/emotes.h b/applications/dolphin/scenes/assets/emotes.h
deleted file mode 100644
index 6c3f0dba77b..00000000000
--- a/applications/dolphin/scenes/assets/emotes.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-
-// temp
-const char* console_emotes[] = {
- "Run it, m8",
- "Lets GOOOO",
- "Click it, buddy",
- "I wanna play",
- "Wtf is this?",
- "Just do it",
- "JUST DO IT!",
-};
diff --git a/applications/dolphin/scenes/assets/items.c b/applications/dolphin/scenes/assets/items.c
deleted file mode 100644
index 539c01e1d25..00000000000
--- a/applications/dolphin/scenes/assets/items.c
+++ /dev/null
@@ -1,233 +0,0 @@
-#include
-#include "applications.h"
-#include "items_i.h"
-#include "emotes.h"
-#include
-
-const Item Food = {
- .layer = 4,
- .timeout = 100,
- .pos =
- {
- .x = 0,
- .y = 90,
- },
- .width = 60,
- .height = 50,
- .draw = food_redraw,
- .callback = food_callback};
-
-const Item Console = {
- .layer = 4,
- .timeout = 100,
- .pos =
- {
- .x = 357,
- .y = 190,
- },
- .width = 40,
- .height = 20,
- .draw = console_redraw,
- .callback = console_callback};
-
-const Item* Home[] = {&Food, &Console};
-
-const Item** Scenes[] = {Home};
-
-const Item** get_scene(SceneState* state) {
- return Scenes[state->scene_id];
-}
-
-static void dolphin_scene_start_app(SceneState* state, const FlipperApplication* flipper_app) {
- furi_assert(state);
- furi_assert(flipper_app);
-
- state->scene_app_thread = furi_thread_alloc();
-
- furi_assert(flipper_app->app);
- furi_assert(flipper_app->name);
-
- furi_thread_set_name(state->scene_app_thread, flipper_app->name);
- furi_thread_set_stack_size(state->scene_app_thread, flipper_app->stack_size);
- furi_thread_set_callback(state->scene_app_thread, flipper_app->app);
- furi_thread_start(state->scene_app_thread);
-}
-
-uint16_t roll_new(uint16_t prev, uint16_t max) {
- uint16_t val = 999;
- while(val != prev) {
- val = random() % max;
- break;
- }
- return val;
-}
-
-static void dolphin_scene_type_text(
- Canvas* canvas,
- SceneState* state,
- uint8_t x,
- uint8_t y,
- const char* text) {
- char dialog_str[64];
- char buf[64];
-
- strcpy(dialog_str, (char*)text);
-
- if(state->dialog_progress <= strlen(dialog_str)) {
- if(HAL_GetTick() / 10 % 2 == 0) state->dialog_progress++;
- dialog_str[state->dialog_progress] = '\0';
- snprintf(buf, state->dialog_progress, dialog_str);
- } else {
- snprintf(buf, 64, dialog_str);
- }
-
- canvas_draw_str_aligned(canvas, x, y, AlignCenter, AlignCenter, buf);
-}
-
-const void scene_activate_item_callback(SceneState* state, Canvas* canvas) {
- furi_assert(state);
- furi_assert(canvas);
-
- const Item* near = is_nearby(state);
- if(near && state->use_pending == true) {
- state->action_timeout = near->timeout;
- near->callback(canvas, state);
- state->use_pending = false;
- } else if(near) {
- near->callback(canvas, state);
- }
-}
-
-const Vec2 item_get_pos(SceneState* state, ItemsEnum item) {
- const Item** current = get_scene(state);
- Vec2 rel_pos = {0, 0};
-
- rel_pos.x = DOLPHIN_WIDTH / 2 + (current[item]->pos.x * PARALLAX(current[item]->layer));
- rel_pos.y = DOLPHIN_WIDTH / 4 + (current[item]->pos.y * PARALLAX(current[item]->layer));
-
- return rel_pos;
-}
-
-const Item* is_nearby(SceneState* state) {
- furi_assert(state);
- uint8_t item = 0;
- bool found = false;
- const Item** current = get_scene(state);
- while(item < ItemsEnumTotal) {
- int32_t rel_x =
- (DOLPHIN_CENTER + DOLPHIN_WIDTH / 2 -
- (current[item]->pos.x - state->player_global.x) * PARALLAX(current[item]->layer));
-
- uint8_t item_height = current[item]->height;
- uint8_t item_width = current[item]->width;
-
- int32_t rel_y = current[item]->pos.y - state->player_global.y;
-
- if(abs(rel_x) <= item_width && abs(rel_y) <= item_height) {
- found = !found;
- break;
- }
- ++item;
- }
- return found ? current[item] : NULL;
-}
-
-void food_redraw(Canvas* canvas, void* s) {
- furi_assert(s);
- SceneState* state = s;
-
- const Icon* food_frames[] = {
- &I_food1_61x98,
- &I_food2_61x98,
- &I_food3_61x98,
- &I_food4_61x98,
- &I_food5_61x98,
- &I_food6_61x98,
- &I_food7_61x98,
- &I_food8_61x98,
- &I_food9_61x98,
- &I_food10_61x98,
- &I_food11_61x98,
- &I_food12_61x98,
- };
-
- uint8_t frame = ((HAL_GetTick() / 200) % SIZEOF_ARRAY(food_frames));
-
- if(is_nearby(state) && (state->player_global.y > Food.pos.y)) {
- dolphin_scene_type_text(
- canvas,
- state,
- (Food.pos.x - state->player_global.x) * PARALLAX(Food.layer) + 90,
- state->screen.y + 8,
- console_emotes[state->emote_id]);
-
- } else {
- state->dialog_progress = 0;
- state->emote_id = roll_new(state->previous_emote, SIZEOF_ARRAY(console_emotes));
- }
-
- canvas_draw_icon(
- canvas,
- (Food.pos.x - state->player_global.x) * PARALLAX(Food.layer),
- Food.pos.y - state->player_global.y,
- food_frames[frame]);
-
- canvas_set_bitmap_mode(canvas, true);
-}
-
-void food_callback(Canvas* canvas, void* s) {
- furi_assert(s);
- SceneState* state = s;
- if(state->use_pending) {
- dolphin_scene_start_app(state, &FLIPPER_SCENE_APPS[1]);
- }
-}
-
-void console_redraw(Canvas* canvas, void* s) {
- furi_assert(s);
- SceneState* state = s;
-
- const Icon* console[] = {
- &I_Console_74x67_0,
- &I_Console_74x67_1,
- &I_Console_74x67_2,
- &I_Console_74x67_3,
- &I_Console_74x67_4,
- &I_Console_74x67_5,
- &I_Console_74x67_6,
- &I_Console_74x67_7,
- &I_Console_74x67_8,
-
- };
-
- uint8_t frame = ((HAL_GetTick() / 100) % SIZEOF_ARRAY(console));
-
- canvas_draw_icon(
- canvas,
- (Console.pos.x - state->player_global.x) * PARALLAX(Console.layer),
- Console.pos.y - state->player_global.y,
- console[frame]);
-
- canvas_set_bitmap_mode(canvas, true);
-
- if(is_nearby(state)) {
- dolphin_scene_type_text(
- canvas,
- state,
- (Console.pos.x - state->player_global.x) * PARALLAX(Console.layer) - 25,
- Console.pos.y - state->player_global.y + 14,
- console_emotes[state->emote_id]);
-
- } else {
- state->dialog_progress = 0;
- state->emote_id = roll_new(state->previous_emote, SIZEOF_ARRAY(console_emotes));
- }
-}
-
-void console_callback(Canvas* canvas, void* s) {
- furi_assert(s);
- SceneState* state = s;
- if(state->use_pending) {
- dolphin_scene_start_app(state, &FLIPPER_SCENE_APPS[0]);
- }
-}
\ No newline at end of file
diff --git a/applications/dolphin/scenes/assets/items.h b/applications/dolphin/scenes/assets/items.h
deleted file mode 100644
index 9da4d17ccff..00000000000
--- a/applications/dolphin/scenes/assets/items.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-#include "dolphin/scenes/scene.h"
-
-typedef enum {
- ItemsFood,
- ItemsConsole,
- ItemsEnumTotal,
-} ItemsEnum;
-
-uint16_t roll_new(uint16_t prev, uint16_t max);
-const Vec2 item_get_pos(SceneState* state, ItemsEnum item);
-const Item* is_nearby(SceneState* state);
-const Item** get_scene(SceneState* state);
-const void scene_activate_item_callback(SceneState* state, Canvas* canvas);
diff --git a/applications/dolphin/scenes/assets/items_i.h b/applications/dolphin/scenes/assets/items_i.h
deleted file mode 100644
index 872dee35e63..00000000000
--- a/applications/dolphin/scenes/assets/items_i.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-#include "items.h"
-
-void food_redraw(Canvas* canvas, void* state);
-void food_callback(Canvas* canvas, void* state);
-
-void console_redraw(Canvas* canvas, void* state);
-void console_callback(Canvas* canvas, void* state);
diff --git a/applications/dolphin/scenes/assets/meta.h b/applications/dolphin/scenes/assets/meta.h
deleted file mode 100644
index 467e9ea0ea9..00000000000
--- a/applications/dolphin/scenes/assets/meta.h
+++ /dev/null
@@ -1,276 +0,0 @@
-#pragma once
-#include "dolphin/scenes/scene.h"
-
-const DolphinFrame up = {
- .frames =
- {
- {
- .f = &I_up1_73x61,
- .b = &I_black_up1_73x61,
- },
- {
- .f = &I_up2_73x61,
- .b = &I_black_up2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame up_down = {
- .frames =
- {
- {
- .f = &I_updown1_73x61,
- .b = &I_black_updown1_73x61,
- },
- {
- .f = &I_updown2_73x61,
- .b = &I_black_updown2_73x61,
- },
- {
- .f = &I_updown3_73x61,
- .b = &I_black_updown3_73x61,
- },
- },
- .total = 3,
-};
-
-const DolphinFrame up_right = {
- .frames =
- {
- {
- .f = &I_upright1_73x61,
- .b = &I_black_upright1_73x61,
- },
- {
- .f = &I_upright2_73x61,
- .b = &I_black_upright2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame up_left = {
- .frames =
- {
- {
- .f = &I_upleft1_73x61,
- .b = &I_black_upleft1_73x61,
- },
- {
- .f = &I_upleft2_73x61,
- .b = &I_black_upleft2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame right = {
- .frames =
- {
- {
- .f = &I_right1_73x61,
- .b = &I_black_right1_73x61,
- },
- {
- .f = &I_right2_73x61,
- .b = &I_black_right2_73x61,
- },
- {
- .f = &I_right3_73x61,
- .b = &I_black_right3_73x61,
- },
- },
- .total = 3,
-};
-
-const DolphinFrame right_up = {
- .frames =
- {
- {
- .f = &I_rightup1_73x61,
- .b = &I_black_rightup1_73x61,
- },
- {
- .f = &I_rightup2_73x61,
- .b = &I_black_rightup2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame right_down = {
- .frames =
- {
- {
- .f = &I_rightdown1_73x61,
- .b = &I_black_rightdown1_73x61,
- },
- {
- .f = &I_rightdown2_73x61,
- .b = &I_black_rightdown2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame right_left = {
- .frames =
- {
- {
- .f = &I_rightleft1_73x61,
- .b = &I_black_rightleft1_73x61,
- },
- {
- .f = &I_rightleft2_73x61,
- .b = &I_black_rightleft2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame down = {
- .frames =
- {
- {
- .f = &I_down1_73x61,
- .b = &I_black_down1_73x61,
- },
- {
- .f = &I_down2_73x61,
- .b = &I_black_down2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame down_up = {
- .frames =
- {
- {
- .f = &I_downup1_73x61,
- .b = &I_black_downup1_73x61,
- },
- {
- .f = &I_downup2_73x61,
- .b = &I_black_downup2_73x61,
- },
- {
- .f = &I_downup3_73x61,
- .b = &I_black_downup3_73x61,
- },
- },
- .total = 3,
-};
-
-const DolphinFrame down_left = {
- .frames =
- {
- {
- .f = &I_downleft1_73x61,
- .b = &I_black_downleft1_73x61,
- },
- {
- .f = &I_downleft2_73x61,
- .b = &I_black_downleft2_73x61,
- },
- {
- .f = &I_downleft3_73x61,
- .b = &I_black_downleft3_73x61,
- },
- },
- .total = 3,
-};
-
-const DolphinFrame down_right = {
- .frames =
- {
- {
- .f = &I_downright1_73x61,
- .b = &I_black_downright1_73x61,
- },
- {
- .f = &I_downright2_73x61,
- .b = &I_black_downright2_73x61,
- },
- {
- .f = &I_downright3_73x61,
- .b = &I_black_downright3_73x61,
- },
- },
- .total = 3,
-};
-
-const DolphinFrame left = {
- .frames =
- {
- {
- .f = &I_left1_73x61,
- .b = &I_black_left1_73x61,
- },
- {
- .f = &I_left2_73x61,
- .b = &I_black_left2_73x61,
- },
- {
- .f = &I_left3_73x61,
- .b = &I_black_left3_73x61,
- },
- },
- .total = 3,
-};
-
-const DolphinFrame left_up = {
- .frames =
- {
- {
- .f = &I_leftup1_73x61,
- .b = &I_black_leftup1_73x61,
- },
- {
- .f = &I_leftup2_73x61,
- .b = &I_black_leftup2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame left_down = {
- .frames =
- {
- {
- .f = &I_leftdown1_73x61,
- .b = &I_black_leftdown1_73x61,
- },
- {
- .f = &I_leftdown2_73x61,
- .b = &I_black_leftdown2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame left_right = {
- .frames =
- {
- {
- .f = &I_rightleft1_73x61,
- .b = &I_black_rightleft1_73x61,
- },
- {
- .f = &I_rightleft2_73x61,
- .b = &I_black_rightleft2_73x61,
- },
- },
- .total = 2,
-};
-
-const DolphinFrame* frames[4][4] = {
- [DirUp] = {[DirUp] = &up, [DirRight] = &up_right, [DirDown] = &up_down, [DirLeft] = &up_left},
- [DirRight] =
- {[DirUp] = &right_up, [DirRight] = &right, [DirDown] = &right_down, [DirLeft] = &right_left},
- [DirDown] =
- {[DirUp] = &down_up, [DirRight] = &down_right, [DirDown] = &down, [DirLeft] = &down_left},
- [DirLeft] =
- {[DirUp] = &left_up, [DirRight] = &left_right, [DirDown] = &left_down, [DirLeft] = &left},
-};
diff --git a/applications/dolphin/scenes/scene.c b/applications/dolphin/scenes/scene.c
deleted file mode 100644
index 13c0cff0cc4..00000000000
--- a/applications/dolphin/scenes/scene.c
+++ /dev/null
@@ -1,151 +0,0 @@
-#include
-#include
-#include "scene.h"
-
-static SceneAppGui* scene_app_gui = NULL;
-static ValueMutex* scene_state_mutex = NULL;
-
-void dolphin_scene_redraw(Canvas* canvas, void* ctx) {
- furi_assert(canvas);
- furi_assert(ctx);
-
- SceneState* state = (SceneState*)acquire_mutex((ValueMutex*)ctx, 25);
- if(state == NULL) return; // redraw fail
- uint32_t t = xTaskGetTickCount();
-
- canvas_clear(canvas);
- dolphin_scene_render(state, canvas, t);
- dolphin_scene_render_state(state, canvas);
- release_mutex((ValueMutex*)ctx, state);
-}
-
-void dolphin_scene_handle_input(SceneState* state, InputEvent* input) {
- // printf("[kb] event: %02x %s\n", input->key, input->state ? "pressed" : "released");
- dolphin_scene_handle_user_input(state, input);
-}
-
-void dolphin_scene_tick_handler(SceneState* state, uint32_t t, uint32_t dt) {
- // printf("t: %d, dt: %d\n", t, dt);
- dolphin_scene_coordinates(state, dt);
- dolphin_scene_update_state(state, t, dt);
-}
-
-static void scene_engine_tick_callback(void* p) {
- osMessageQueueId_t event_queue = p;
- AppEvent event;
- event.type = EventTypeTick;
- osMessageQueuePut(event_queue, (void*)&event, 0, 0);
-}
-
-static void scene_engine_input_callback(InputEvent* input_event, void* ctx) {
- osMessageQueueId_t event_queue = ctx;
- AppEvent event;
- event.type = EventTypeKey;
- event.value.input = *input_event;
- osMessageQueuePut(event_queue, (void*)&event, 0, osWaitForever);
-}
-
-void scene_alloc() {
- printf("scene_alloc: start\r\n");
- furi_assert(scene_app_gui == NULL);
- furi_assert(scene_state_mutex == NULL);
-
- // SceneAppGui
- scene_app_gui = furi_alloc(sizeof(SceneAppGui));
- scene_app_gui->mqueue = osMessageQueueNew(8, sizeof(AppEvent), NULL);
- scene_app_gui->gui = furi_record_open("gui");
- scene_app_gui->view_port = view_port_alloc();
- scene_app_gui->timer =
- osTimerNew(scene_engine_tick_callback, osTimerPeriodic, scene_app_gui->mqueue, NULL);
- printf("scene_alloc: timer %p\r\n", scene_app_gui->timer);
- // Scene State
- SceneState* scene_state = furi_alloc(sizeof(SceneState));
- scene_state->player.y = DOLPHIN_DEFAULT_Y;
- scene_state->player.x = DOLPHIN_CENTER;
-
- scene_state->player_global.x = 160;
- scene_state->player_global.y = WORLD_HEIGHT;
-
- scene_state->frame_group = DirRight;
- scene_state->frame_type = DirRight;
- scene_state->frame_pending = DirRight;
- scene_state->last_group = DirRight;
-
- scene_state->screen.x = scene_state->player.x;
- scene_state->screen.y = scene_state->player.y;
- // scene_state->debug = true;
- scene_state_mutex = furi_alloc(sizeof(ValueMutex));
- furi_check(init_mutex(scene_state_mutex, scene_state, sizeof(SceneState)));
-
- // Open GUI and register fullscreen view_port
- view_port_draw_callback_set(scene_app_gui->view_port, dolphin_scene_redraw, scene_state_mutex);
- view_port_input_callback_set(
- scene_app_gui->view_port, scene_engine_input_callback, scene_app_gui->mqueue);
- gui_add_view_port(scene_app_gui->gui, scene_app_gui->view_port, GuiLayerFullscreen);
- view_port_enabled_set(scene_app_gui->view_port, true);
- printf("scene_alloc: complete\r\n");
-}
-
-void scene_free() {
- printf("scene_free: start\r\n");
- view_port_enabled_set(scene_app_gui->view_port, false);
- gui_remove_view_port(scene_app_gui->gui, scene_app_gui->view_port);
-
- SceneState* scene_state = (SceneState*)acquire_mutex_block(scene_state_mutex);
- furi_assert(scene_state);
- free(scene_state);
- release_mutex(scene_state_mutex, scene_state);
- delete_mutex(scene_state_mutex);
- free(scene_state_mutex);
- scene_state_mutex = NULL;
-
- furi_check(osTimerDelete(scene_app_gui->timer) == osOK);
- furi_record_close("gui");
- view_port_free(scene_app_gui->view_port);
- furi_check(osMessageQueueDelete(scene_app_gui->mqueue) == osOK);
- free(scene_app_gui);
- scene_app_gui = NULL;
- printf("scene_free: complete\r\n");
-}
-
-int32_t scene_app(void* p) {
- furi_hal_power_insomnia_enter();
- scene_alloc();
-
- osTimerStart(scene_app_gui->timer, 40);
-
- uint32_t t = xTaskGetTickCount();
- uint32_t prev_t = 0;
-
- while(1) {
- AppEvent event;
- if(osMessageQueueGet(scene_app_gui->mqueue, &event, 0, osWaitForever) == osOK) {
- SceneState* scene_state = (SceneState*)acquire_mutex_block(scene_state_mutex);
- if(event.type == EventTypeTick) {
- t = xTaskGetTickCount();
- dolphin_scene_tick_handler(scene_state, t, (t - prev_t) % 1024);
- prev_t = t;
- } else if(event.type == EventTypeKey) {
- if(event.value.input.key == InputKeyBack &&
- event.value.input.type == InputTypeShort) {
- release_mutex(scene_state_mutex, scene_state);
- break;
-
- } else {
- dolphin_scene_handle_input(scene_state, &event.value.input);
- }
- }
- release_mutex(scene_state_mutex, scene_state);
- view_port_update(scene_app_gui->view_port);
- }
- }
-
- osTimerStop(scene_app_gui->timer);
-
- // CMSIS + FreeRTOS = Enterprise
- osDelay(15);
-
- scene_free();
- furi_hal_power_insomnia_exit();
- return 0;
-}
\ No newline at end of file
diff --git a/applications/dolphin/scenes/scene.h b/applications/dolphin/scenes/scene.h
deleted file mode 100644
index 78783769ac3..00000000000
--- a/applications/dolphin/scenes/scene.h
+++ /dev/null
@@ -1,138 +0,0 @@
-#pragma once
-
-#include
-#include
-#include
-
-// global
-#define SCALE 32
-// screen
-
-#define SCREEN_WIDTH GUI_DISPLAY_WIDTH
-#define SCREEN_HEIGHT GUI_DISPLAY_HEIGHT
-#define BONDARIES_X_LEFT 40
-#define BONDARIES_X_RIGHT 88
-
-// player
-#define DOLPHIN_WIDTH 32
-#define DOLPHIN_HEIGHT 32
-#define DOLPHIN_CENTER (SCREEN_WIDTH / 2 - DOLPHIN_WIDTH)
-#define SPEED_X 4
-#define SPEED_Y 4
-#define ACTIONS_NUM 4
-#define DOLPHIN_DEFAULT_Y 2
-#define MAX_FRAMES 3
-
-// world
-#define WORLD_WIDTH 256
-#define WORLD_HEIGHT 192
-
-#define LAYERS 8
-#define DOLPHIN_LAYER 6
-#define PARALLAX_MOD 7
-#define PARALLAX(layer) layer / PARALLAX_MOD - layer
-
-#define DIALOG_PROGRESS 250
-
-enum Actions { IDLE = 0, EMOTE, INTERACT, MINDCONTROL };
-
-static const uint16_t default_timeout[] =
- {[IDLE] = 100, [EMOTE] = 50, [INTERACT] = 10, [MINDCONTROL] = 50};
-
-typedef enum {
- EventTypeTick,
- EventTypeKey,
-} EventType;
-
-typedef struct {
- union {
- InputEvent input;
- } value;
- EventType type;
-} AppEvent;
-
-typedef struct {
- int32_t x;
- int32_t y;
-} Vec2;
-
-typedef struct {
- osMessageQueueId_t mqueue;
- Gui* gui;
- ViewPort* view_port;
- osTimerId_t* timer;
-} SceneAppGui;
-
-typedef struct {
- uint8_t layer;
- uint16_t timeout;
- Vec2 pos;
-
- uint8_t width;
- uint8_t height;
-
- void (*draw)(Canvas* canvas, void* model);
- void (*callback)(Canvas* canvas, void* model);
-} Item;
-
-typedef enum {
- DirUp = 0,
- DirRight,
- DirDown,
- DirLeft,
-} FrameDirectionEnum;
-
-typedef struct {
- const Icon* f;
- const Icon* b;
-} DolphinGfxAsset;
-
-typedef struct {
- const DolphinGfxAsset frames[MAX_FRAMES];
- const uint8_t total;
-} DolphinFrame;
-
-typedef struct {
- Vec2 player;
- Vec2 player_global;
- Vec2 player_v;
- Vec2 screen;
-
- FrameDirectionEnum frame_group;
- FrameDirectionEnum last_group;
- FrameDirectionEnum frame_pending;
- FrameDirectionEnum frame_type;
-
- const DolphinFrame* current_frame;
-
- bool transition;
- bool transition_pending;
- bool use_pending;
- bool debug;
-
- uint8_t player_anim;
- uint8_t frame_idx;
-
- uint8_t scene_id;
- uint8_t emote_id;
- uint8_t previous_emote;
-
- uint8_t action;
- uint8_t prev_action;
- uint8_t action_timeout;
- uint8_t dialog_progress;
-
- FuriThread* scene_app_thread;
-} SceneState;
-
-void dolphin_scene_render(SceneState* state, Canvas* canvas, uint32_t t);
-void dolphin_scene_render_dolphin(SceneState* state, Canvas* canvas);
-void dolphin_scene_handle_user_input(SceneState* state, InputEvent* input);
-void dolphin_scene_coordinates(SceneState* state, uint32_t dt);
-
-void dolphin_scene_render_state(SceneState* state, Canvas* canvas);
-void dolphin_scene_update_state(SceneState* state, uint32_t t, uint32_t dt);
-
-void dolphin_scene_redraw(Canvas* canvas, void* ctx);
-void dolphin_scene_tick_handler(SceneState* state, uint32_t t, uint32_t dt);
-void dolphin_scene_handle_input(SceneState* state, InputEvent* input);
diff --git a/applications/dolphin/scenes/scene_controls.c b/applications/dolphin/scenes/scene_controls.c
deleted file mode 100644
index 0d54f91bf0b..00000000000
--- a/applications/dolphin/scenes/scene_controls.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include
-#include
-#include "scene.h"
-
-void dolphin_scene_handle_user_input(SceneState* state, InputEvent* input) {
- furi_assert(state);
- furi_assert(input);
-
- state->last_group = state->frame_group;
- if(input->type == InputTypePress) {
- state->action = MINDCONTROL;
- }
-
- if(state->action == MINDCONTROL) {
- if(input->type == InputTypePress) {
- if(input->key == InputKeyRight) {
- state->player_v.y = 0;
- state->player_v.x = SPEED_X;
- } else if(input->key == InputKeyLeft) {
- state->player_v.y = 0;
- state->player_v.x = -SPEED_X;
- } else if(input->key == InputKeyUp) {
- state->player_v.x = 0;
- state->player_v.y = -SPEED_Y;
- } else if(input->key == InputKeyDown) {
- state->player_v.x = 0;
- state->player_v.y = SPEED_Y;
- }
- }
-
- if(input->type == InputTypeRelease) {
- state->player_v.x = 0;
- state->player_v.y = 0;
- } else if(input->type == InputTypeShort) {
- if(input->key == InputKeyOk) {
- state->prev_action = MINDCONTROL;
- state->action = INTERACT;
- state->use_pending = true;
- state->action_timeout = 0;
- }
- }
- }
-}
-
-void dolphin_scene_coordinates(SceneState* state, uint32_t dt) {
- furi_assert(state);
-
- // global pos
- state->player_global.x = CLAMP(state->player_global.x + state->player_v.x, WORLD_WIDTH, 0);
- state->player_global.y = CLAMP(state->player_global.y + state->player_v.y, WORLD_HEIGHT, 0);
-
- // nudge camera postition
- if(state->player_global.x > 170) {
- state->player.x =
- CLAMP(state->player.x - state->player_v.x / 2, DOLPHIN_CENTER, -DOLPHIN_WIDTH / 2);
- } else if(state->player_global.x < 70) {
- state->player.x =
- CLAMP(state->player.x - state->player_v.x / 2, DOLPHIN_WIDTH * 2, DOLPHIN_CENTER);
- }
-}
\ No newline at end of file
diff --git a/applications/dolphin/scenes/scene_dolphin_state.c b/applications/dolphin/scenes/scene_dolphin_state.c
deleted file mode 100644
index 8d0886bd5b8..00000000000
--- a/applications/dolphin/scenes/scene_dolphin_state.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#include
-#include "scene.h"
-#include "assets/items.h"
-
-static void scene_proceed_action(SceneState* state) {
- furi_assert(state);
- state->prev_action = state->action;
- state->action = roll_new(state->prev_action, ACTIONS_NUM);
- state->action_timeout = default_timeout[state->action];
-}
-
-static void scene_action_handler(SceneState* state) {
- furi_assert(state);
- if(state->action == MINDCONTROL) {
- if(state->player_v.x != 0 || state->player_v.y != 0) {
- state->action_timeout = default_timeout[state->action];
- }
- }
-
- if(state->action_timeout > 0) {
- state->action_timeout--;
- }
-}
-
-void dolphin_scene_update_state(SceneState* state, uint32_t t, uint32_t dt) {
- furi_assert(state);
- scene_action_handler(state);
-
- switch(state->action) {
- case INTERACT:
- if(state->action_timeout == 0) {
- if(state->prev_action == MINDCONTROL) {
- state->action = MINDCONTROL;
- } else {
- scene_proceed_action(state);
- }
- }
- break;
-
- default:
-
- if(state->action_timeout == 0) {
- scene_proceed_action(state);
- }
- break;
- }
-}
diff --git a/applications/dolphin/scenes/scene_gfx.c b/applications/dolphin/scenes/scene_gfx.c
deleted file mode 100644
index 0f722980303..00000000000
--- a/applications/dolphin/scenes/scene_gfx.c
+++ /dev/null
@@ -1,121 +0,0 @@
-#include
-#include "scene.h"
-#include "assets/items.h"
-#include "assets/meta.h"
-#include
-
-void dolphin_scene_transition_handler(SceneState* state) {
- uint8_t speed_mod = (state->player_v.x || state->player_v.y || state->transition) ? 6 : 10;
-
- if(state->player_v.x < 0) {
- state->frame_pending = DirLeft;
- } else if(state->player_v.x > 0) {
- state->frame_pending = DirRight;
- } else if(state->player_v.y < 0) {
- state->frame_pending = DirUp;
- } else if(state->player_v.y > 0) {
- state->frame_pending = DirDown;
- }
- state->transition_pending = state->frame_group != state->frame_pending;
-
- if(*&frames[state->frame_group][state->frame_type]->frames[state->frame_idx].f) {
- state->current_frame = *&frames[state->frame_group][state->frame_type];
- }
-
- uint8_t total = state->current_frame->frames[2].f == NULL ? 2 : 3;
-
- if(state->transition_pending && !state->frame_idx) {
- state->transition_pending = false;
- state->transition = true;
- }
-
- if(state->transition) {
- state->frame_type = state->frame_pending;
- state->frame_group = state->last_group;
- state->transition = !(state->frame_idx == total - 1);
- } else {
- state->frame_group = state->frame_type;
- }
-
- state->player_anim++;
-
- if(!(state->player_anim % speed_mod)) {
- state->frame_idx = (state->frame_idx + 1) % total;
- }
-}
-
-void dolphin_scene_render_dolphin(SceneState* state, Canvas* canvas) {
- furi_assert(state);
- furi_assert(canvas);
-
- dolphin_scene_transition_handler(state);
-
- canvas_set_bitmap_mode(canvas, true);
- canvas_set_color(canvas, ColorWhite);
- canvas_draw_icon(
- canvas, state->player.x, state->player.y, state->current_frame->frames[state->frame_idx].b);
- canvas_set_color(canvas, ColorBlack);
- canvas_draw_icon(
- canvas, state->player.x, state->player.y, state->current_frame->frames[state->frame_idx].f);
- canvas_set_bitmap_mode(canvas, false);
-}
-
-static bool item_screen_bounds_x(int32_t pos) {
- return pos > -SCREEN_WIDTH && pos < (SCREEN_WIDTH * 2);
-}
-static bool item_screen_bounds_y(int32_t pos) {
- return pos > -SCREEN_HEIGHT * 2 && pos < (SCREEN_HEIGHT * 2);
-}
-
-void dolphin_scene_render(SceneState* state, Canvas* canvas, uint32_t t) {
- furi_assert(state);
- furi_assert(canvas);
-
- canvas_set_font(canvas, FontSecondary);
- canvas_set_color(canvas, ColorBlack);
- const Item** current_scene = get_scene(state);
-
- for(uint8_t l = 0; l < LAYERS; l++) {
- for(uint8_t i = 0; i < ItemsEnumTotal; i++) {
- int32_t item_pos_X = (current_scene[i]->pos.x - state->player_global.x);
- int32_t item_pos_Y = (current_scene[i]->pos.y - state->player_global.y);
-
- if(item_screen_bounds_x(item_pos_X) && item_screen_bounds_y(item_pos_Y)) {
- if(l == current_scene[i]->layer) {
- if(current_scene[i]->draw) {
- current_scene[i]->draw(canvas, state);
- }
- }
- }
- }
-
- if(l == DOLPHIN_LAYER) dolphin_scene_render_dolphin(state, canvas);
- }
-}
-
-void dolphin_scene_render_state(SceneState* state, Canvas* canvas) {
- furi_assert(state);
- furi_assert(canvas);
-
- char buf[64];
-
- canvas_set_font(canvas, FontSecondary);
- canvas_set_color(canvas, ColorBlack);
-
- // dolphin_scene_debug
- if(state->debug) {
- sprintf(
- buf,
- "%d:%d %d/%dP%dL%d T%d-%d",
- state->frame_idx,
- state->current_frame->frames[2].f == NULL ? 2 : 3,
- state->frame_group,
- state->frame_type,
- state->frame_pending,
- state->last_group,
- state->transition_pending,
- state->transition);
- canvas_draw_str(canvas, 0, 13, buf);
- }
- if(state->action == INTERACT) scene_activate_item_callback(state, canvas);
-}
\ No newline at end of file
diff --git a/applications/gui/modules/file_select.c b/applications/gui/modules/file_select.c
index 1b68e46fdae..f41b95c9877 100644
--- a/applications/gui/modules/file_select.c
+++ b/applications/gui/modules/file_select.c
@@ -289,7 +289,7 @@ bool file_select_fill_strings(FileSelect* file_select) {
storage_dir_close(directory);
storage_file_free(directory);
free(name);
- return false;
+ return true;
}
while(1) {
@@ -350,7 +350,7 @@ bool file_select_fill_count(FileSelect* file_select) {
storage_dir_close(directory);
storage_file_free(directory);
free(name);
- return false;
+ return true;
}
while(1) {
diff --git a/applications/irda/cli/irda-cli.cpp b/applications/irda/cli/irda-cli.cpp
index 6cde9c95d24..1becdfbbcbe 100644
--- a/applications/irda/cli/irda-cli.cpp
+++ b/applications/irda/cli/irda-cli.cpp
@@ -74,6 +74,12 @@ static void irda_cli_print_usage(void) {
printf(" %s", irda_get_protocol_name((IrdaProtocol)i));
}
printf("\r\n");
+ printf("\tRaw format:\r\n");
+ printf("\tir_tx RAW F: DC: ...\r\n");
+ printf(
+ "\tFrequency (%d - %d), Duty cycle (0 - 100), max 512 samples\r\n",
+ IRDA_MIN_FREQUENCY,
+ IRDA_MAX_FREQUENCY);
}
static bool parse_message(const char* str, IrdaMessage* message) {
@@ -115,6 +121,14 @@ static bool parse_signal_raw(
*duty_cycle = (float)atoi(duty_cycle_str) / 100;
str += strlen(frequency_str) + strlen(duty_cycle_str) + 10;
+ if((*frequency > IRDA_MAX_FREQUENCY) || (*frequency < IRDA_MIN_FREQUENCY)) {
+ return false;
+ }
+
+ if((*duty_cycle <= 0) || (*duty_cycle > 1)) {
+ return false;
+ }
+
uint32_t timings_cnt_max = *timings_cnt;
*timings_cnt = 0;
@@ -131,13 +145,15 @@ static bool parse_signal_raw(
++*timings_cnt;
}
- printf("\r\nTransmit:");
- for(size_t i = 0; i < *timings_cnt; ++i) {
- printf(" %ld", timings[i]);
+ if(*timings_cnt > 0) {
+ printf("\r\nTransmit:");
+ for(size_t i = 0; i < *timings_cnt; ++i) {
+ printf(" %ld", timings[i]);
+ }
+ printf("\r\n");
}
- printf("\r\n");
- return true;
+ return (parsed == 2) && (*timings_cnt > 0);
}
static void irda_cli_start_ir_tx(Cli* cli, string_t args, void* context) {
@@ -150,8 +166,8 @@ static void irda_cli_start_ir_tx(Cli* cli, string_t args, void* context) {
const char* str = string_get_cstr(args);
uint32_t frequency;
float duty_cycle;
- uint32_t* timings = (uint32_t*)furi_alloc(sizeof(uint32_t) * 1000);
- uint32_t timings_cnt = 1000;
+ uint32_t* timings = (uint32_t*)furi_alloc(sizeof(uint32_t) * 512);
+ uint32_t timings_cnt = 512;
if(parse_message(str, &message)) {
irda_send(&message, 1);
diff --git a/applications/irda/irda-app-brute-force.cpp b/applications/irda/irda-app-brute-force.cpp
index 42797d2197e..ab8c039bb4e 100644
--- a/applications/irda/irda-app-brute-force.cpp
+++ b/applications/irda/irda-app-brute-force.cpp
@@ -1,8 +1,10 @@
#include "irda-app-brute-force.h"
#include "irda/irda-app-file-parser.h"
-#include "m-string.h"
-#include
+
#include
+#include
+#include
+#include
void IrdaAppBruteForce::add_record(int index, const char* name) {
records[name].index = index;
@@ -16,7 +18,7 @@ bool IrdaAppBruteForce::calculate_messages() {
file_parser = std::make_unique();
fs_res = file_parser->open_irda_file_read(universal_db_filename);
if(!fs_res) {
- file_parser.reset(nullptr);
+ file_parser.reset();
return false;
}
@@ -31,7 +33,7 @@ bool IrdaAppBruteForce::calculate_messages() {
}
file_parser->close();
- file_parser.reset(nullptr);
+ file_parser.reset();
return true;
}
@@ -43,7 +45,7 @@ void IrdaAppBruteForce::stop_bruteforce() {
furi_assert(file_parser);
current_record.clear();
file_parser->close();
- file_parser.reset(nullptr);
+ file_parser.reset();
}
}
@@ -81,7 +83,7 @@ bool IrdaAppBruteForce::start_bruteforce(int index, int& record_amount) {
file_parser = std::make_unique();
result = file_parser->open_irda_file_read(universal_db_filename);
if(!result) {
- (void)file_parser.reset(nullptr);
+ file_parser.reset();
}
}
diff --git a/applications/irda/irda-app-brute-force.h b/applications/irda/irda-app-brute-force.h
index 174f74f54a5..58736759b34 100644
--- a/applications/irda/irda-app-brute-force.h
+++ b/applications/irda/irda-app-brute-force.h
@@ -1,7 +1,8 @@
#pragma once
-#include "furi/check.h"
-#include
+
#include "irda-app-file-parser.h"
+
+#include
#include
class IrdaAppBruteForce {
diff --git a/applications/irda/irda-app-file-parser.cpp b/applications/irda/irda-app-file-parser.cpp
index 8cd0499b63b..f462919e6cb 100644
--- a/applications/irda/irda-app-file-parser.cpp
+++ b/applications/irda/irda-app-file-parser.cpp
@@ -1,22 +1,16 @@
#include "irda-app-file-parser.h"
-#include "furi/check.h"
#include "irda-app-remote-manager.h"
#include "irda-app-signal.h"
-#include "m-string.h"
+
+#include
+#include
#include
#include
-#include
-#include
-#include
#include
#include
+#include
#include
-uint32_t const IrdaAppFileParser::max_line_length = ((9 + 1) * 512 + 100);
-const char* IrdaAppFileParser::irda_directory = "/any/irda";
-const char* IrdaAppFileParser::irda_extension = ".ir";
-uint32_t const IrdaAppFileParser::max_raw_timings_in_signal = 512;
-
bool IrdaAppFileParser::open_irda_file_read(const char* name) {
std::string full_filename;
if(name[0] != '/')
@@ -158,18 +152,41 @@ std::unique_ptr
IrdaProtocol protocol = irda_get_protocol_by_name(protocol_name);
if(!irda_is_protocol_valid((IrdaProtocol)protocol)) {
+ size_t end_of_str = MIN(str.find_last_not_of(" \t\r\n") + 1, (size_t)30);
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "Unknown protocol(\'%.*s...\'): \'%s\'",
+ end_of_str,
+ str.c_str(),
+ protocol_name);
return nullptr;
}
int address_length = irda_get_protocol_address_length(protocol);
uint32_t address_mask = (1LU << (4 * address_length)) - 1;
if(address != (address & address_mask)) {
+ size_t end_of_str = MIN(str.find_last_not_of(" \t\r\n") + 1, (size_t)30);
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "Signal(\'%.*s...\'): address is too long (mask for this protocol is 0x%08X): 0x%X",
+ end_of_str,
+ str.c_str(),
+ address_mask,
+ address);
return nullptr;
}
int command_length = irda_get_protocol_command_length(protocol);
uint32_t command_mask = (1LU << (4 * command_length)) - 1;
if(command != (command & command_mask)) {
+ size_t end_of_str = MIN(str.find_last_not_of(" \t\r\n") + 1, (size_t)30);
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "Signal(\'%.*s...\'): command is too long (mask for this protocol is 0x%08X): 0x%X",
+ end_of_str,
+ str.c_str(),
+ command_mask,
+ command);
return nullptr;
}
@@ -195,34 +212,81 @@ const char* find_first_not_of(const char* str, char symbol) {
return str;
}
+static int remove_args32(std::string_view& str, size_t num) {
+ int removed_length = 0;
+
+ while(num--) {
+ char buf[32];
+
+ size_t index = str.find_first_not_of(" \t");
+ if(index == std::string_view::npos) break;
+ removed_length += index;
+ str.remove_prefix(index);
+
+ if(str.empty()) break;
+
+ int parsed = std::sscanf(str.data(), "%31s", buf);
+ if(!parsed) break;
+
+ size_t len = strlen(buf);
+ if(!len) break;
+ removed_length += len;
+ str.remove_prefix(len);
+
+ if(str.empty()) break;
+ }
+
+ return removed_length;
+}
+
std::unique_ptr
IrdaAppFileParser::parse_signal_raw(const std::string& string) const {
uint32_t frequency;
uint32_t duty_cycle;
- int str_len = string.size();
std::string_view str(string.c_str());
auto irda_file_signal = std::make_unique();
int parsed = std::sscanf(
str.data(), "%31s RAW F:%ld DC:%ld", irda_file_signal->name, &frequency, &duty_cycle);
- if((parsed != 3) || (frequency > 42000) || (frequency < 32000) || (duty_cycle == 0) ||
- (duty_cycle >= 100)) {
+ if(parsed != 3) {
return nullptr;
}
- char dummy[100] = {0};
- int header_len = 0;
- header_len = sniprintf(
- dummy,
- sizeof(dummy),
- "%.31s RAW F:%ld DC:%ld",
- irda_file_signal->name,
- frequency,
- duty_cycle);
+ if((frequency < IRDA_MIN_FREQUENCY) || (frequency > IRDA_MAX_FREQUENCY)) {
+ size_t end_of_str = MIN(string.find_last_not_of(" \t\r\n") + 1, (size_t)30);
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "RAW signal(\'%.*s...\'): frequency is out of bounds (%ld-%ld): %ld",
+ end_of_str,
+ string.c_str(),
+ IRDA_MIN_FREQUENCY,
+ IRDA_MAX_FREQUENCY,
+ frequency);
+ return nullptr;
+ }
+
+ if((duty_cycle == 0) || (duty_cycle > 100)) {
+ size_t end_of_str = MIN(string.find_last_not_of(" \t\r\n") + 1, (size_t)30);
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "RAW signal(\'%.*s...\'): duty cycle is out of bounds (0-100): %ld",
+ end_of_str,
+ string.c_str(),
+ duty_cycle);
+ return nullptr;
+ }
- furi_assert(header_len < str_len);
- str.remove_prefix(header_len);
+ int header_len = remove_args32(str, 4);
+
+ size_t last_valid_ch = str.find_last_not_of(" \t\r\n");
+ if(last_valid_ch != std::string_view::npos) {
+ str.remove_suffix(str.size() - last_valid_ch - 1);
+ } else {
+ FURI_LOG_E(
+ "IrdaFileParser", "RAW signal(\'%.*s\'): no timings", header_len, string.c_str());
+ return nullptr;
+ }
/* move allocated timings into raw signal object */
IrdaAppSignal::RawSignal raw_signal = {
@@ -231,40 +295,59 @@ std::unique_ptr
while(!str.empty()) {
char buf[10];
- size_t index = str.find_first_not_of(' ', 1);
+ size_t index = str.find_first_not_of(" \t", 1);
if(index == std::string_view::npos) {
break;
}
str.remove_prefix(index);
parsed = std::sscanf(str.data(), "%9s", buf);
if(parsed != 1) {
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "RAW signal(\'%.*s...\'): failed on timing[%ld] \'%*s\'",
+ header_len,
+ string.c_str(),
+ raw_signal.timings_cnt,
+ str.size(),
+ str.data());
result = false;
- furi_assert(0);
break;
}
str.remove_prefix(strlen(buf));
int value = atoi(buf);
if(value <= 0) {
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "RAW signal(\'%.*s...\'): failed on timing[%ld] \'%s\'",
+ header_len,
+ string.c_str(),
+ raw_signal.timings_cnt,
+ buf);
result = false;
- furi_assert(0);
break;
}
- raw_signal.timings[raw_signal.timings_cnt] = value;
- ++raw_signal.timings_cnt;
- result = true;
+
if(raw_signal.timings_cnt >= max_raw_timings_in_signal) {
+ FURI_LOG_E(
+ "IrdaFileParser",
+ "RAW signal(\'%.*s...\'): too much timings (max %ld)",
+ header_len,
+ string.c_str(),
+ max_raw_timings_in_signal);
result = false;
- furi_assert(0);
break;
}
+ raw_signal.timings[raw_signal.timings_cnt] = value;
+ ++raw_signal.timings_cnt;
+ result = true;
}
if(result) {
/* copy timings instead of moving them to occupy less than max_raw_timings_in_signal */
irda_file_signal->signal.copy_raw_signal(raw_signal.timings, raw_signal.timings_cnt);
} else {
- (void)irda_file_signal.release();
+ irda_file_signal.reset();
}
delete[] raw_signal.timings;
return irda_file_signal;
@@ -306,13 +389,11 @@ bool IrdaAppFileParser::check_errors() {
}
std::string IrdaAppFileParser::file_select(const char* selected) {
- TextStore* filename_ts = new TextStore(128);
+ auto filename_ts = std::make_unique(IrdaAppRemoteManager::max_remote_name_length);
bool result;
result = file_worker.file_select(
irda_directory, irda_extension, filename_ts->text, filename_ts->text_size, selected);
- delete filename_ts;
-
return result ? std::string(filename_ts->text) : std::string();
}
diff --git a/applications/irda/irda-app-file-parser.h b/applications/irda/irda-app-file-parser.h
index f3d42e491d9..b0c98ad6c29 100644
--- a/applications/irda/irda-app-file-parser.h
+++ b/applications/irda/irda-app-file-parser.h
@@ -1,8 +1,12 @@
#pragma once
+
+#include "irda-app-signal.h"
+
#include
#include
-#include "irda-app-signal.h"
#include
+#include
+#include
class IrdaAppFileParser {
public:
@@ -40,10 +44,11 @@ class IrdaAppFileParser {
std::unique_ptr parse_signal_raw(const std::string& str) const;
std::string make_full_name(const std::string& name) const;
- static const char* irda_directory;
- static const char* irda_extension;
- static const uint32_t max_line_length;
- static uint32_t const max_raw_timings_in_signal;
+ static inline const char* const irda_directory = "/any/irda";
+ static inline const char* const irda_extension = ".ir";
+ static inline const uint32_t max_raw_timings_in_signal = 512;
+ static inline const uint32_t max_line_length =
+ (9 + 1) * IrdaAppFileParser::max_raw_timings_in_signal + 100;
FileWorkerCpp file_worker;
char file_buf[128];
diff --git a/applications/irda/irda-app-remote-manager.cpp b/applications/irda/irda-app-remote-manager.cpp
index cd98893e051..b3f713ce416 100644
--- a/applications/irda/irda-app-remote-manager.cpp
+++ b/applications/irda/irda-app-remote-manager.cpp
@@ -1,15 +1,14 @@
#include "irda-app-remote-manager.h"
-#include
-#include "furi.h"
-#include "furi/check.h"
-#include "gui/modules/button_menu.h"
-#include "irda.h"
-#include
-#include
-#include
-#include
#include "irda-app-file-parser.h"
+#include
+
+#include
+#include
+#include
+#include
+#include
+
static const std::string default_remote_name = "remote";
std::string IrdaAppRemoteManager::find_vacant_remote_name(const std::string& name) {
diff --git a/applications/irda/irda-app-remote-manager.h b/applications/irda/irda-app-remote-manager.h
index 60993b3083b..b2a0197fa43 100644
--- a/applications/irda/irda-app-remote-manager.h
+++ b/applications/irda/irda-app-remote-manager.h
@@ -1,12 +1,14 @@
#pragma once
+
+#include "irda-app-signal.h"
+
#include
-#include
+#include
+
+#include
#include
-#include
#include
-#include
-#include
-#include "irda-app-signal.h"
+#include
class IrdaAppRemoteButton {
friend class IrdaAppRemoteManager;
@@ -40,13 +42,13 @@ class IrdaAppRemote {
};
class IrdaAppRemoteManager {
- static const char* irda_directory;
- static const char* irda_extension;
std::unique_ptr remote;
std::string make_full_name(const std::string& remote_name) const;
std::string make_remote_name(const std::string& full_name) const;
public:
+ static inline const uint32_t max_button_name_length = 31;
+ static inline const uint32_t max_remote_name_length = 31;
bool add_remote_with_button(const char* button_name, const IrdaAppSignal& signal);
bool add_button(const char* button_name, const IrdaAppSignal& signal);
diff --git a/applications/irda/irda-app-signal.cpp b/applications/irda/irda-app-signal.cpp
index 0a9a79567c7..45ec376705d 100644
--- a/applications/irda/irda-app-signal.cpp
+++ b/applications/irda/irda-app-signal.cpp
@@ -5,9 +5,9 @@ void IrdaAppSignal::copy_timings(const uint32_t* timings, size_t size) {
furi_assert(size);
furi_assert(timings);
+ payload.raw.timings_cnt = size;
if(size) {
payload.raw.timings = new uint32_t[size];
- payload.raw.timings_cnt = size;
memcpy(payload.raw.timings, timings, size * sizeof(uint32_t));
}
}
diff --git a/applications/irda/irda-app.cpp b/applications/irda/irda-app.cpp
index 5dd7c7b48a3..042d237cc0d 100644
--- a/applications/irda/irda-app.cpp
+++ b/applications/irda/irda-app.cpp
@@ -48,6 +48,18 @@ int32_t IrdaApp::run(void* args) {
return 0;
};
+IrdaApp::IrdaApp() {
+ furi_check(IrdaAppRemoteManager::max_button_name_length < get_text_store_size());
+ notification = static_cast(furi_record_open("notification"));
+ irda_worker = irda_worker_alloc();
+}
+
+IrdaApp::~IrdaApp() {
+ irda_worker_free(irda_worker);
+ furi_record_close("notification");
+ for(auto& [key, scene] : scenes) delete scene;
+}
+
IrdaAppViewManager* IrdaApp::get_view_manager() {
return &view_manager;
}
diff --git a/applications/irda/irda-app.h b/applications/irda/irda-app.h
index cc7611a41b6..904bead3b6b 100644
--- a/applications/irda/irda-app.h
+++ b/applications/irda/irda-app.h
@@ -88,19 +88,12 @@ class IrdaApp {
static void text_input_callback(void* context);
static void popup_callback(void* context);
- IrdaApp() {
- notification = static_cast(furi_record_open("notification"));
- irda_worker = irda_worker_alloc();
- }
- ~IrdaApp() {
- irda_worker_free(irda_worker);
- furi_record_close("notification");
- for(auto& it : scenes) delete it.second;
- }
+ IrdaApp();
+ ~IrdaApp();
private:
- static const uint8_t text_store_size = 128;
- static const uint8_t text_store_max = 2;
+ static inline const uint8_t text_store_size = 128;
+ static inline const uint8_t text_store_max = 2;
char text_store[text_store_max][text_store_size + 1];
bool learn_new_remote;
EditElement element;
diff --git a/applications/irda/scene/irda-app-scene-edit-rename.cpp b/applications/irda/scene/irda-app-scene-edit-rename.cpp
index d821d03fe75..39fbf2ba0aa 100644
--- a/applications/irda/scene/irda-app-scene-edit-rename.cpp
+++ b/applications/irda/scene/irda-app-scene-edit-rename.cpp
@@ -3,24 +3,31 @@
void IrdaAppSceneEditRename::on_enter(IrdaApp* app) {
IrdaAppViewManager* view_manager = app->get_view_manager();
TextInput* text_input = view_manager->get_text_input();
+ size_t enter_name_length = 0;
auto remote_manager = app->get_remote_manager();
if(app->get_edit_element() == IrdaApp::EditElement::Button) {
furi_assert(app->get_current_button() != IrdaApp::ButtonNA);
auto button_name = remote_manager->get_button_name(app->get_current_button());
- strncpy(app->get_text_store(0), button_name.c_str(), app->get_text_store_size());
+ char* buffer_str = app->get_text_store(0);
+ size_t max_len = IrdaAppRemoteManager::max_button_name_length;
+ strncpy(buffer_str, button_name.c_str(), max_len);
+ buffer_str[max_len + 1] = 0;
+ enter_name_length = max_len;
+ text_input_set_header_text(text_input, "Name the key");
} else {
auto remote_name = remote_manager->get_remote_name();
strncpy(app->get_text_store(0), remote_name.c_str(), app->get_text_store_size());
+ enter_name_length = IrdaAppRemoteManager::max_remote_name_length;
+ text_input_set_header_text(text_input, "Name the remote");
}
- text_input_set_header_text(text_input, "Name the key");
text_input_set_result_callback(
text_input,
IrdaApp::text_input_callback,
app,
app->get_text_store(0),
- app->get_text_store_size(),
+ enter_name_length,
false);
view_manager->switch_to(IrdaAppViewManager::ViewType::TextInput);
diff --git a/applications/irda/scene/irda-app-scene-learn-enter-name.cpp b/applications/irda/scene/irda-app-scene-learn-enter-name.cpp
index 185e7fbc3c4..aa22d62083c 100644
--- a/applications/irda/scene/irda-app-scene-learn-enter-name.cpp
+++ b/applications/irda/scene/irda-app-scene-learn-enter-name.cpp
@@ -26,7 +26,7 @@ void IrdaAppSceneLearnEnterName::on_enter(IrdaApp* app) {
IrdaApp::text_input_callback,
app,
app->get_text_store(0),
- app->get_text_store_size(),
+ IrdaAppRemoteManager::max_button_name_length,
false);
view_manager->switch_to(IrdaAppViewManager::ViewType::TextInput);
diff --git a/applications/nfc/nfc.c b/applications/nfc/nfc.c
index a1f4a19ef36..5bf788b90c8 100755
--- a/applications/nfc/nfc.c
+++ b/applications/nfc/nfc.c
@@ -151,9 +151,10 @@ void nfc_text_store_clear(Nfc* nfc) {
int32_t nfc_app(void* p) {
Nfc* nfc = nfc_alloc();
+ char* args = p;
// Check argument and run corresponding scene
- if(p && nfc_device_load(&nfc->dev, p)) {
+ if((*args != '\0') && nfc_device_load(&nfc->dev, p)) {
scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid);
} else {
scene_manager_next_scene(nfc->scene_manager, NfcSceneStart);
diff --git a/applications/nfc/nfc_cli.c b/applications/nfc/nfc_cli.c
index 8adf5761667..e2ddb5ed13d 100755
--- a/applications/nfc/nfc_cli.c
+++ b/applications/nfc/nfc_cli.c
@@ -64,7 +64,7 @@ void nfc_cli_emulate(Cli* cli, string_t args, void* context) {
};
while(!cli_cmd_interrupt_received(cli)) {
- if(furi_hal_nfc_listen(params.uid, params.uid_len, params.atqa, params.sak, 100)) {
+ if(furi_hal_nfc_listen(params.uid, params.uid_len, params.atqa, params.sak, false, 100)) {
printf("Reader detected\r\n");
furi_hal_nfc_deactivate();
}
diff --git a/applications/nfc/nfc_device.c b/applications/nfc/nfc_device.c
index bfe0e877785..bdb3d5477b7 100755
--- a/applications/nfc/nfc_device.c
+++ b/applications/nfc/nfc_device.c
@@ -8,6 +8,7 @@
static const char* nfc_app_folder = "/any/nfc";
static const char* nfc_app_extension = ".nfc";
+static const char* nfc_app_shadow_extension = ".shd";
static bool nfc_device_read_hex(string_t str, uint8_t* buff, uint16_t len) {
string_strim(str);
@@ -259,7 +260,11 @@ void nfc_device_set_name(NfcDevice* dev, const char* name) {
strlcpy(dev->dev_name, name, NFC_DEV_NAME_MAX_LEN);
}
-bool nfc_device_save(NfcDevice* dev, const char* dev_name) {
+static bool nfc_device_save_file(
+ NfcDevice* dev,
+ const char* dev_name,
+ const char* folder,
+ const char* extension) {
furi_assert(dev);
FileWorker* file_worker = file_worker_alloc(false);
@@ -275,7 +280,7 @@ bool nfc_device_save(NfcDevice* dev, const char* dev_name) {
break;
};
// First remove nfc device file if it was saved
- string_printf(dev_file_name, "%s/%s%s", nfc_app_folder, dev_name, nfc_app_extension);
+ string_printf(dev_file_name, "%s/%s%s", folder, dev_name, extension);
if(!file_worker_remove(file_worker, string_get_cstr(dev_file_name))) {
break;
};
@@ -316,16 +321,42 @@ bool nfc_device_save(NfcDevice* dev, const char* dev_name) {
return true;
}
+bool nfc_device_save(NfcDevice* dev, const char* dev_name) {
+ return nfc_device_save_file(dev, dev_name, nfc_app_folder, nfc_app_extension);
+}
+
+bool nfc_device_save_shadow(NfcDevice* dev, const char* dev_name) {
+ dev->shadow_file_exist = true;
+ return nfc_device_save_file(dev, dev_name, nfc_app_folder, nfc_app_shadow_extension);
+}
+
static bool nfc_device_load_data(FileWorker* file_worker, string_t path, NfcDevice* dev) {
string_t temp_string;
string_init(temp_string);
bool parsed = false;
do {
- // Open key file
- if(!file_worker_open(file_worker, string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) {
+ // Check existance of shadow file
+ size_t ext_start = string_search_str(path, nfc_app_extension);
+ string_set_n(temp_string, path, 0, ext_start);
+ string_cat_printf(temp_string, "%s", nfc_app_shadow_extension);
+ if(!file_worker_is_file_exist(
+ file_worker, string_get_cstr(temp_string), &dev->shadow_file_exist)) {
break;
}
+ // Open shadow file if it exists. If not - open original
+ if(dev->shadow_file_exist) {
+ if(!file_worker_open(
+ file_worker, string_get_cstr(temp_string), FSAM_READ, FSOM_OPEN_EXISTING)) {
+ break;
+ }
+ } else {
+ if(!file_worker_open(
+ file_worker, string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) {
+ break;
+ }
+ }
+
// Read and parse format from 1st line
if(!file_worker_read_until(file_worker, temp_string, '\n')) {
break;
@@ -427,13 +458,61 @@ void nfc_device_clear(NfcDevice* dev) {
bool nfc_device_delete(NfcDevice* dev) {
furi_assert(dev);
- bool result = false;
+ bool result = true;
FileWorker* file_worker = file_worker_alloc(false);
string_t file_path;
- string_init_printf(file_path, "%s/%s%s", nfc_app_folder, dev->dev_name, nfc_app_extension);
- result = file_worker_remove(file_worker, string_get_cstr(file_path));
+
+ do {
+ // Delete original file
+ string_init_printf(file_path, "%s/%s%s", nfc_app_folder, dev->dev_name, nfc_app_extension);
+ if(!file_worker_remove(file_worker, string_get_cstr(file_path))) {
+ result = false;
+ break;
+ }
+ // Delete shadow file if it exists
+ if(dev->shadow_file_exist) {
+ string_clean(file_path);
+ string_printf(
+ file_path, "%s/%s%s", nfc_app_folder, dev->dev_name, nfc_app_shadow_extension);
+ if(!file_worker_remove(file_worker, string_get_cstr(file_path))) {
+ result = false;
+ break;
+ }
+ }
+ } while(0);
+
string_clear(file_path);
file_worker_close(file_worker);
file_worker_free(file_worker);
return result;
}
+
+bool nfc_device_restore(NfcDevice* dev) {
+ furi_assert(dev);
+ furi_assert(dev->shadow_file_exist);
+
+ bool result = true;
+ FileWorker* file_worker = file_worker_alloc(false);
+ string_t path;
+
+ do {
+ string_init_printf(
+ path, "%s/%s%s", nfc_app_folder, dev->dev_name, nfc_app_shadow_extension);
+ if(!file_worker_remove(file_worker, string_get_cstr(path))) {
+ result = false;
+ break;
+ }
+ dev->shadow_file_exist = false;
+ string_clean(path);
+ string_printf(path, "%s/%s%s", nfc_app_folder, dev->dev_name, nfc_app_extension);
+ if(!nfc_device_load_data(file_worker, path, dev)) {
+ result = false;
+ break;
+ }
+ } while(0);
+
+ string_clear(path);
+ file_worker_close(file_worker);
+ file_worker_free(file_worker);
+ return result;
+}
diff --git a/applications/nfc/nfc_device.h b/applications/nfc/nfc_device.h
index c2de3120ca1..25f0e42f8ef 100644
--- a/applications/nfc/nfc_device.h
+++ b/applications/nfc/nfc_device.h
@@ -59,12 +59,15 @@ typedef struct {
char dev_name[NFC_DEV_NAME_MAX_LEN];
char file_name[NFC_FILE_NAME_MAX_LEN];
NfcDeviceSaveFormat format;
+ bool shadow_file_exist;
} NfcDevice;
void nfc_device_set_name(NfcDevice* dev, const char* name);
bool nfc_device_save(NfcDevice* dev, const char* dev_name);
+bool nfc_device_save_shadow(NfcDevice* dev, const char* dev_name);
+
bool nfc_device_load(NfcDevice* dev, const char* file_path);
bool nfc_file_select(NfcDevice* dev);
@@ -72,3 +75,5 @@ bool nfc_file_select(NfcDevice* dev);
void nfc_device_clear(NfcDevice* dev);
bool nfc_device_delete(NfcDevice* dev);
+
+bool nfc_device_restore(NfcDevice* dev);
diff --git a/applications/nfc/nfc_worker.c b/applications/nfc/nfc_worker.c
index 334e6d7bbe0..9fd6dc646fa 100755
--- a/applications/nfc/nfc_worker.c
+++ b/applications/nfc/nfc_worker.c
@@ -143,7 +143,7 @@ void nfc_worker_detect(NfcWorker* nfc_worker) {
void nfc_worker_emulate(NfcWorker* nfc_worker) {
NfcDeviceCommomData* data = &nfc_worker->dev_data->nfc_data;
while(nfc_worker->state == NfcWorkerStateEmulate) {
- if(furi_hal_nfc_listen(data->uid, data->uid_len, data->atqa, data->sak, 100)) {
+ if(furi_hal_nfc_listen(data->uid, data->uid_len, data->atqa, data->sak, false, 100)) {
FURI_LOG_I(NFC_WORKER_TAG, "Reader detected");
}
osDelay(10);
@@ -406,7 +406,7 @@ void nfc_worker_emulate_apdu(NfcWorker* nfc_worker) {
0x00, 0x00};
while(nfc_worker->state == NfcWorkerStateEmulateApdu) {
- if(furi_hal_nfc_listen(params.uid, params.uid_len, params.atqa, params.sak, 300)) {
+ if(furi_hal_nfc_listen(params.uid, params.uid_len, params.atqa, params.sak, false, 300)) {
FURI_LOG_I(NFC_WORKER_TAG, "POS terminal detected");
// Read data from POS terminal
err = furi_hal_nfc_data_exchange(NULL, 0, &rx_buff, &rx_len, false);
@@ -608,33 +608,52 @@ void nfc_worker_emulate_mifare_ul(NfcWorker* nfc_worker) {
uint8_t* rx_buff;
uint16_t* rx_len;
NfcDeviceData* data = nfc_worker->dev_data;
-
+ MifareUlDevice mf_ul_emulate;
+ // Setup emulation parameters from mifare ultralight data structure
+ mf_ul_prepare_emulation(&mf_ul_emulate, &data->mf_ul_data);
while(nfc_worker->state == NfcWorkerStateEmulateMifareUl) {
if(furi_hal_nfc_listen(
data->nfc_data.uid,
data->nfc_data.uid_len,
data->nfc_data.atqa,
data->nfc_data.sak,
- 1000)) {
- FURI_LOG_I(NFC_WORKER_TAG, "Hello my dudes");
- // Prepare version answer
- tx_len = sizeof(data->mf_ul_data.version);
- memcpy(tx_buff, &data->mf_ul_data.version, tx_len);
- err = furi_hal_nfc_data_exchange(tx_buff, tx_len, &rx_buff, &rx_len, false);
- if(err == ERR_NONE) {
- FURI_LOG_I(NFC_WORKER_TAG, "Received 1st message:");
- for(uint16_t i = 0; i < *rx_len; i++) {
- printf("%02X ", rx_buff[i]);
+ true,
+ 200)) {
+ FURI_LOG_D(NFC_WORKER_TAG, "Anticollision passed");
+ if(furi_hal_nfc_get_first_frame(&rx_buff, &rx_len)) {
+ // Data exchange loop
+ while(nfc_worker->state == NfcWorkerStateEmulateMifareUl) {
+ tx_len = mf_ul_prepare_emulation_response(
+ rx_buff, *rx_len, tx_buff, &mf_ul_emulate);
+ if(tx_len > 0) {
+ err =
+ furi_hal_nfc_data_exchange(tx_buff, tx_len, &rx_buff, &rx_len, false);
+ if(err == ERR_NONE) {
+ continue;
+ } else {
+ FURI_LOG_E(NFC_WORKER_TAG, "Communication error: %d", err);
+ break;
+ }
+ } else {
+ FURI_LOG_W(NFC_WORKER_TAG, "Not valid command: %02X", rx_buff[0]);
+ furi_hal_nfc_deactivate();
+ break;
+ }
}
- printf("\r\n");
} else {
- FURI_LOG_E(NFC_WORKER_TAG, "Error in 1st data exchange: select PPSE");
+ FURI_LOG_W(NFC_WORKER_TAG, "Error in 1st data exchange");
furi_hal_nfc_deactivate();
- continue;
}
}
- FURI_LOG_W(NFC_WORKER_TAG, "Hello my dudes");
- osDelay(10);
+ // Check if data was modified
+ if(mf_ul_emulate.data_changed) {
+ nfc_worker->dev_data->mf_ul_data = mf_ul_emulate.data;
+ if(nfc_worker->callback) {
+ nfc_worker->callback(nfc_worker->context);
+ }
+ }
+ FURI_LOG_W(NFC_WORKER_TAG, "Can't find reader");
+ osThreadYield();
}
}
diff --git a/applications/nfc/scenes/nfc_scene_config.h b/applications/nfc/scenes/nfc_scene_config.h
index 149b4d7f727..97072ead116 100755
--- a/applications/nfc/scenes/nfc_scene_config.h
+++ b/applications/nfc/scenes/nfc_scene_config.h
@@ -26,3 +26,4 @@ ADD_SCENE(nfc, run_emv_app_confirm, RunEmvAppConfirm)
ADD_SCENE(nfc, read_emv_data, ReadEmvData)
ADD_SCENE(nfc, read_emv_data_success, ReadEmvDataSuccess)
ADD_SCENE(nfc, emulate_apdu_sequence, EmulateApduSequence)
+ADD_SCENE(nfc, restore_original, RestoreOriginal)
diff --git a/applications/nfc/scenes/nfc_scene_emulate_mifare_ul.c b/applications/nfc/scenes/nfc_scene_emulate_mifare_ul.c
index 7286b7ac15c..d1d52bef73d 100755
--- a/applications/nfc/scenes/nfc_scene_emulate_mifare_ul.c
+++ b/applications/nfc/scenes/nfc_scene_emulate_mifare_ul.c
@@ -1,38 +1,33 @@
#include "../nfc_i.h"
+#define NFC_MF_UL_DATA_NOT_CHANGED (0UL)
+#define NFC_MF_UL_DATA_CHANGED (1UL)
+
+void nfc_emulate_mifare_ul_worker_callback(void* context) {
+ Nfc* nfc = (Nfc*)context;
+ scene_manager_set_scene_state(
+ nfc->scene_manager, NfcSceneEmulateMifareUl, NFC_MF_UL_DATA_CHANGED);
+}
+
const void nfc_scene_emulate_mifare_ul_on_enter(void* context) {
Nfc* nfc = (Nfc*)context;
// Setup view
Popup* popup = nfc->popup;
- NfcDeviceCommomData* data = &nfc->dev.dev_data.nfc_data;
-
if(strcmp(nfc->dev.dev_name, "")) {
nfc_text_store_set(nfc, "%s", nfc->dev.dev_name);
- } else if(data->uid_len == 4) {
- nfc_text_store_set(
- nfc, "%02X %02X %02X %02X", data->uid[0], data->uid[1], data->uid[2], data->uid[3]);
- } else if(data->uid_len == 7) {
- nfc_text_store_set(
- nfc,
- "%02X %02X %02X %02X\n%02X %02X %02X",
- data->uid[0],
- data->uid[1],
- data->uid[2],
- data->uid[3],
- data->uid[4],
- data->uid[5],
- data->uid[6]);
}
-
popup_set_icon(popup, 0, 3, &I_RFIDDolphinSend_97x61);
- popup_set_header(popup, "Emulating Mf Ul", 56, 31, AlignLeft, AlignTop);
- popup_set_text(popup, nfc->text_store, 56, 43, AlignLeft, AlignTop);
+ popup_set_header(popup, "Emulating\nMf Ultralight", 56, 31, AlignLeft, AlignTop);
// Setup and start worker
-
view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup);
- nfc_worker_start(nfc->worker, NfcWorkerStateEmulateMifareUl, &nfc->dev.dev_data, NULL, nfc);
+ nfc_worker_start(
+ nfc->worker,
+ NfcWorkerStateEmulateMifareUl,
+ &nfc->dev.dev_data,
+ nfc_emulate_mifare_ul_worker_callback,
+ nfc);
}
const bool nfc_scene_emulate_mifare_ul_on_event(void* context, SceneManagerEvent event) {
@@ -42,6 +37,17 @@ const bool nfc_scene_emulate_mifare_ul_on_event(void* context, SceneManagerEvent
if(event.type == SceneManagerEventTypeTick) {
notification_message(nfc->notifications, &sequence_blink_blue_10);
consumed = true;
+ } else if(event.type == SceneManagerEventTypeBack) {
+ // Stop worker
+ nfc_worker_stop(nfc->worker);
+ // Check if data changed and save in shadow file
+ if(scene_manager_get_scene_state(nfc->scene_manager, NfcSceneEmulateMifareUl) ==
+ NFC_MF_UL_DATA_CHANGED) {
+ scene_manager_set_scene_state(
+ nfc->scene_manager, NfcSceneEmulateMifareUl, NFC_MF_UL_DATA_NOT_CHANGED);
+ nfc_device_save_shadow(&nfc->dev, nfc->dev.dev_name);
+ }
+ consumed = false;
}
return consumed;
}
@@ -49,9 +55,6 @@ const bool nfc_scene_emulate_mifare_ul_on_event(void* context, SceneManagerEvent
const void nfc_scene_emulate_mifare_ul_on_exit(void* context) {
Nfc* nfc = (Nfc*)context;
- // Stop worker
- nfc_worker_stop(nfc->worker);
-
// Clear view
Popup* popup = nfc->popup;
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
diff --git a/applications/nfc/scenes/nfc_scene_mifare_ul_menu.c b/applications/nfc/scenes/nfc_scene_mifare_ul_menu.c
index 396c393bff6..707166187fd 100755
--- a/applications/nfc/scenes/nfc_scene_mifare_ul_menu.c
+++ b/applications/nfc/scenes/nfc_scene_mifare_ul_menu.c
@@ -38,7 +38,7 @@ const bool nfc_scene_mifare_ul_menu_on_event(void* context, SceneManagerEvent ev
} else if(event.event == SubmenuIndexEmulate) {
scene_manager_set_scene_state(
nfc->scene_manager, NfcSceneMifareUlMenu, SubmenuIndexEmulate);
- scene_manager_next_scene(nfc->scene_manager, NfcSceneNotImplemented);
+ scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateMifareUl);
return true;
}
} else if(event.type == SceneManagerEventTypeBack) {
diff --git a/applications/nfc/scenes/nfc_scene_restore_original.c b/applications/nfc/scenes/nfc_scene_restore_original.c
new file mode 100644
index 00000000000..3229d0238bf
--- /dev/null
+++ b/applications/nfc/scenes/nfc_scene_restore_original.c
@@ -0,0 +1,48 @@
+#include "../nfc_i.h"
+
+#define SCENE_RESTORE_ORIGINAL_CUSTOM_EVENT (0UL)
+
+void nfc_scene_restore_original_popup_callback(void* context) {
+ Nfc* nfc = (Nfc*)context;
+ view_dispatcher_send_custom_event(nfc->view_dispatcher, SCENE_RESTORE_ORIGINAL_CUSTOM_EVENT);
+}
+
+const void nfc_scene_restore_original_on_enter(void* context) {
+ Nfc* nfc = (Nfc*)context;
+
+ // Setup view
+ Popup* popup = nfc->popup;
+ popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59);
+ popup_set_header(popup, "Original file\nrestored", 13, 22, AlignLeft, AlignBottom);
+ popup_set_timeout(popup, 1500);
+ popup_set_context(popup, nfc);
+ popup_set_callback(popup, nfc_scene_restore_original_popup_callback);
+ popup_enable_timeout(popup);
+ view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup);
+}
+
+const bool nfc_scene_restore_original_on_event(void* context, SceneManagerEvent event) {
+ Nfc* nfc = (Nfc*)context;
+ bool consumed = false;
+
+ if(event.type == SceneManagerEventTypeCustom) {
+ if(event.event == SCENE_RESTORE_ORIGINAL_CUSTOM_EVENT) {
+ consumed = scene_manager_previous_scene(nfc->scene_manager);
+ }
+ }
+ return consumed;
+}
+
+const void nfc_scene_restore_original_on_exit(void* context) {
+ Nfc* nfc = (Nfc*)context;
+
+ // Clear view
+ Popup* popup = nfc->popup;
+ popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
+ popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
+ popup_set_icon(popup, 0, 0, NULL);
+ popup_set_callback(popup, NULL);
+ popup_set_context(popup, NULL);
+ popup_set_timeout(popup, 0);
+ popup_disable_timeout(popup);
+}
diff --git a/applications/nfc/scenes/nfc_scene_saved_menu.c b/applications/nfc/scenes/nfc_scene_saved_menu.c
index 24d03fbc702..cd6827833fb 100755
--- a/applications/nfc/scenes/nfc_scene_saved_menu.c
+++ b/applications/nfc/scenes/nfc_scene_saved_menu.c
@@ -5,6 +5,7 @@ enum SubmenuIndex {
SubmenuIndexEdit,
SubmenuIndexDelete,
SubmenuIndexInfo,
+ SubmenuIndexRestoreOriginal,
};
void nfc_scene_saved_menu_submenu_callback(void* context, uint32_t index) {
@@ -29,36 +30,52 @@ const void nfc_scene_saved_menu_on_enter(void* context) {
submenu, "Info", SubmenuIndexInfo, nfc_scene_saved_menu_submenu_callback, nfc);
submenu_set_selected_item(
nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneSavedMenu));
+ if(nfc->dev.shadow_file_exist) {
+ submenu_add_item(
+ submenu,
+ "Restore original",
+ SubmenuIndexRestoreOriginal,
+ nfc_scene_saved_menu_submenu_callback,
+ nfc);
+ }
view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu);
}
const bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) {
Nfc* nfc = (Nfc*)context;
+ bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
+ scene_manager_set_scene_state(nfc->scene_manager, NfcSceneSavedMenu, event.event);
if(event.event == SubmenuIndexEmulate) {
- scene_manager_set_scene_state(
- nfc->scene_manager, NfcSceneSavedMenu, SubmenuIndexEmulate);
- scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid);
- return true;
+ if(nfc->dev.format == NfcDeviceSaveFormatMifareUl) {
+ scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateMifareUl);
+ } else {
+ scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid);
+ }
+ consumed = true;
} else if(event.event == SubmenuIndexEdit) {
- scene_manager_set_scene_state(nfc->scene_manager, NfcSceneSavedMenu, SubmenuIndexEdit);
scene_manager_next_scene(nfc->scene_manager, NfcSceneSetUid);
- return true;
+ consumed = true;
} else if(event.event == SubmenuIndexDelete) {
- scene_manager_set_scene_state(
- nfc->scene_manager, NfcSceneSavedMenu, SubmenuIndexDelete);
scene_manager_next_scene(nfc->scene_manager, NfcSceneDelete);
- return true;
+ consumed = true;
} else if(event.event == SubmenuIndexInfo) {
- scene_manager_set_scene_state(nfc->scene_manager, NfcSceneSavedMenu, SubmenuIndexInfo);
scene_manager_next_scene(nfc->scene_manager, NfcSceneDeviceInfo);
- return true;
+ consumed = true;
+ } else if(event.event == SubmenuIndexRestoreOriginal) {
+ if(!nfc_device_restore(&nfc->dev)) {
+ scene_manager_search_and_switch_to_previous_scene(
+ nfc->scene_manager, NfcSceneStart);
+ } else {
+ scene_manager_next_scene(nfc->scene_manager, NfcSceneRestoreOriginal);
+ }
+ consumed = true;
}
}
- return false;
+ return consumed;
}
const void nfc_scene_saved_menu_on_exit(void* context) {
diff --git a/applications/notification/notification-app.c b/applications/notification/notification-app.c
index 69ac043d50d..22b6794e439 100644
--- a/applications/notification/notification-app.c
+++ b/applications/notification/notification-app.c
@@ -333,7 +333,7 @@ static bool notification_load_settings(NotificationApp* app) {
FURI_LOG_E(
"notification",
"version(%d != %d) mismatch",
- app->settings.version,
+ settings.version,
NOTIFICATION_SETTINGS_VERSION);
} else {
osKernelLock();
diff --git a/applications/storage-settings/scenes/storage-settings-benchmark.c b/applications/storage-settings/scenes/storage-settings-benchmark.c
index 260e06a5cda..bc83e707aef 100644
--- a/applications/storage-settings/scenes/storage-settings-benchmark.c
+++ b/applications/storage-settings/scenes/storage-settings-benchmark.c
@@ -81,7 +81,7 @@ static void storage_settings_benchmark(StorageSettings* app) {
bench_data[i] = (uint8_t)i;
}
- uint16_t bench_size[BENCH_COUNT] = {1, 8, 32, 256, 1024, 4096};
+ uint16_t bench_size[BENCH_COUNT] = {1, 8, 32, 256, 512, 1024};
uint32_t bench_w_speed[BENCH_COUNT] = {0, 0, 0, 0, 0, 0};
uint32_t bench_r_speed[BENCH_COUNT] = {0, 0, 0, 0, 0, 0};
diff --git a/applications/storage/storage-cli.c b/applications/storage/storage-cli.c
index a67378a3dac..f5520e0e3fd 100644
--- a/applications/storage/storage-cli.c
+++ b/applications/storage/storage-cli.c
@@ -1,6 +1,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -25,32 +26,23 @@ void storage_cli_print_usage() {
printf("\tformat\t - format filesystem\r\n");
printf("\tlist\t - list files and dirs\r\n");
printf("\tremove\t - delete the file or directory\r\n");
- printf("\tread\t - read data from file and print file size and content to cli\r\n");
+ printf("\tread\t - read text from file and print file size and content to cli\r\n");
printf(
- "\twrite\t - read data from cli and append it to file, should contain how many bytes you want to write\r\n");
+ "\tread_chunks\t - read data from file and print file size and content to cli, should contain how many bytes you want to read in block\r\n");
+ printf("\twrite\t - read text from cli and append it to file, stops by ctrl+c\r\n");
+ printf(
+ "\twrite_chunk\t - read data from cli and append it to file, should contain how many bytes you want to write\r\n");
printf("\tcopy\t - copy file to new file, must contain new path\r\n");
printf("\trename\t - move file to new file, must contain new path\r\n");
printf("\tmkdir\t - creates a new directory\r\n");
+ printf("\tmd5\t - md5 hash of the file\r\n");
+ printf("\tstat\t - info about file or dir\r\n");
};
void storage_cli_print_error(FS_Error error) {
printf("Storage error: %s\r\n", storage_error_get_desc(error));
}
-void storage_cli_print_path_error(string_t path, FS_Error error) {
- printf(
- "Storage error for path \"%s\": %s\r\n",
- string_get_cstr(path),
- storage_error_get_desc(error));
-}
-
-void storage_cli_print_file_error(string_t path, File* file) {
- printf(
- "Storage error for path \"%s\": %s\r\n",
- string_get_cstr(path),
- storage_file_get_error_desc(file));
-}
-
void storage_cli_info(Cli* cli, string_t path) {
Storage* api = furi_record_open("storage");
@@ -60,10 +52,10 @@ void storage_cli_info(Cli* cli, string_t path) {
FS_Error error = storage_common_fs_info(api, "/int", &total_space, &free_space);
if(error != FSE_OK) {
- storage_cli_print_path_error(path, error);
+ storage_cli_print_error(error);
} else {
printf(
- "Label: %s\r\nType: LittleFS\r\n%lu KB total\r\n%lu KB free\r\n",
+ "Label: %s\r\nType: LittleFS\r\n%luKB total\r\n%luKB free\r\n",
furi_hal_version_get_name_ptr() ? furi_hal_version_get_name_ptr() : "Unknown",
(uint32_t)(total_space / 1024),
(uint32_t)(free_space / 1024));
@@ -73,10 +65,10 @@ void storage_cli_info(Cli* cli, string_t path) {
FS_Error error = storage_sd_info(api, &sd_info);
if(error != FSE_OK) {
- storage_cli_print_path_error(path, error);
+ storage_cli_print_error(error);
} else {
printf(
- "Label: %s\r\nType: %s\r\n%lu KB total\r\n%lu KB free\r\n",
+ "Label: %s\r\nType: %s\r\n%luKB total\r\n%luKB free\r\n",
sd_info.label,
sd_api_get_fs_type_text(sd_info.fs_type),
sd_info.kb_total,
@@ -91,7 +83,7 @@ void storage_cli_info(Cli* cli, string_t path) {
void storage_cli_format(Cli* cli, string_t path) {
if(string_cmp_str(path, "/int") == 0) {
- storage_cli_print_path_error(path, FSE_NOT_IMPLEMENTED);
+ storage_cli_print_error(FSE_NOT_IMPLEMENTED);
} else if(string_cmp_str(path, "/ext") == 0) {
printf("Formatting SD card, all data will be lost. Are you sure (y/n)?\r\n");
char answer = cli_getc(cli);
@@ -102,7 +94,7 @@ void storage_cli_format(Cli* cli, string_t path) {
FS_Error error = storage_sd_format(api);
if(error != FSE_OK) {
- storage_cli_print_path_error(path, error);
+ storage_cli_print_error(error);
} else {
printf("SD card was successfully formatted.\r\n");
}
@@ -142,7 +134,7 @@ void storage_cli_list(Cli* cli, string_t path) {
printf("\tEmpty\r\n");
}
} else {
- storage_cli_print_file_error(path, file);
+ storage_cli_print_error(storage_file_get_error(file));
}
storage_dir_close(file);
@@ -172,7 +164,7 @@ void storage_cli_read(Cli* cli, string_t path) {
free(data);
} else {
- storage_cli_print_file_error(path, file);
+ storage_cli_print_error(storage_file_get_error(file));
}
storage_file_close(file);
@@ -181,52 +173,126 @@ void storage_cli_read(Cli* cli, string_t path) {
furi_record_close("storage");
}
-void storage_cli_write(Cli* cli, string_t path, string_t args) {
+void storage_cli_write(Cli* cli, string_t path) {
Storage* api = furi_record_open("storage");
File* file = storage_file_alloc(api);
- uint32_t size;
- int parsed_count = sscanf(string_get_cstr(args), "%lu", &size);
+ const uint16_t buffer_size = 512;
+ uint8_t* buffer = furi_alloc(buffer_size);
- if(parsed_count == EOF || parsed_count != 1) {
- storage_cli_print_usage();
- } else {
- if(storage_file_open(file, string_get_cstr(path), FSAM_WRITE, FSOM_OPEN_APPEND)) {
- const uint16_t write_size = 8;
- uint32_t readed_index = 0;
- uint8_t* data = furi_alloc(write_size);
+ if(storage_file_open(file, string_get_cstr(path), FSAM_WRITE, FSOM_OPEN_APPEND)) {
+ printf("Just write your text data. New line by Ctrl+Enter, exit by Ctrl+C.\r\n");
- while(true) {
- data[readed_index % write_size] = cli_getc(cli);
- printf("%c", data[readed_index % write_size]);
- fflush(stdout);
- readed_index++;
+ uint32_t readed_index = 0;
- if(((readed_index % write_size) == 0)) {
- uint16_t writed_size = storage_file_write(file, data, write_size);
+ while(true) {
+ uint8_t symbol = cli_getc(cli);
- if(writed_size != write_size) {
- storage_cli_print_file_error(path, file);
- break;
- }
- } else if(readed_index == size) {
- uint16_t writed_size = storage_file_write(file, data, size % write_size);
+ if(symbol == CliSymbolAsciiETX) {
+ uint16_t write_size = readed_index % buffer_size;
+
+ if(write_size > 0) {
+ uint16_t writed_size = storage_file_write(file, buffer, write_size);
- if(writed_size != (size % write_size)) {
- storage_cli_print_file_error(path, file);
- break;
+ if(writed_size != write_size) {
+ storage_cli_print_error(storage_file_get_error(file));
}
+ break;
}
+ }
+
+ buffer[readed_index % buffer_size] = symbol;
+ printf("%c", buffer[readed_index % buffer_size]);
+ fflush(stdout);
+ readed_index++;
- if(readed_index == size) {
+ if(((readed_index % buffer_size) == 0)) {
+ uint16_t writed_size = storage_file_write(file, buffer, buffer_size);
+
+ if(writed_size != buffer_size) {
+ storage_cli_print_error(storage_file_get_error(file));
break;
}
}
- printf("\r\n");
+ }
+ printf("\r\n");
+
+ } else {
+ storage_cli_print_error(storage_file_get_error(file));
+ }
+ storage_file_close(file);
+
+ free(buffer);
+ storage_file_free(file);
+ furi_record_close("storage");
+}
+
+void storage_cli_read_chunks(Cli* cli, string_t path, string_t args) {
+ Storage* api = furi_record_open("storage");
+ File* file = storage_file_alloc(api);
+
+ uint32_t buffer_size;
+ int parsed_count = sscanf(string_get_cstr(args), "%lu", &buffer_size);
+
+ if(parsed_count == EOF || parsed_count != 1) {
+ storage_cli_print_usage();
+ } else if(storage_file_open(file, string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) {
+ uint8_t* data = furi_alloc(buffer_size);
+ uint64_t file_size = storage_file_size(file);
+
+ printf("Size: %lu\r\n", (uint32_t)file_size);
+
+ while(file_size > 0) {
+ printf("\r\nReady?\r\n");
+ cli_getc(cli);
+
+ uint16_t readed_size = storage_file_read(file, data, buffer_size);
+ for(uint16_t i = 0; i < readed_size; i++) {
+ putchar(data[i]);
+ }
+ file_size -= readed_size;
+ }
+ printf("\r\n");
+
+ free(data);
+ } else {
+ storage_cli_print_error(storage_file_get_error(file));
+ }
+
+ storage_file_close(file);
+ storage_file_free(file);
+
+ furi_record_close("storage");
+}
+
+void storage_cli_write_chunk(Cli* cli, string_t path, string_t args) {
+ Storage* api = furi_record_open("storage");
+ File* file = storage_file_alloc(api);
+
+ uint32_t buffer_size;
+ int parsed_count = sscanf(string_get_cstr(args), "%lu", &buffer_size);
+
+ if(parsed_count == EOF || parsed_count != 1) {
+ storage_cli_print_usage();
+ } else {
+ if(storage_file_open(file, string_get_cstr(path), FSAM_WRITE, FSOM_OPEN_APPEND)) {
+ printf("Ready\r\n");
- free(data);
+ uint8_t* buffer = furi_alloc(buffer_size);
+
+ for(uint32_t i = 0; i < buffer_size; i++) {
+ buffer[i] = cli_getc(cli);
+ }
+
+ uint16_t writed_size = storage_file_write(file, buffer, buffer_size);
+
+ if(writed_size != buffer_size) {
+ storage_cli_print_error(storage_file_get_error(file));
+ }
+
+ free(buffer);
} else {
- storage_cli_print_file_error(path, file);
+ storage_cli_print_error(storage_file_get_error(file));
}
storage_file_close(file);
}
@@ -235,6 +301,45 @@ void storage_cli_write(Cli* cli, string_t path, string_t args) {
furi_record_close("storage");
}
+void storage_cli_stat(Cli* cli, string_t path) {
+ Storage* api = furi_record_open("storage");
+
+ if(string_cmp_str(path, "/") == 0) {
+ printf("Storage\r\n");
+ } else if(
+ string_cmp_str(path, "/ext") == 0 || string_cmp_str(path, "/int") == 0 ||
+ string_cmp_str(path, "/any") == 0) {
+ uint64_t total_space;
+ uint64_t free_space;
+ FS_Error error =
+ storage_common_fs_info(api, string_get_cstr(path), &total_space, &free_space);
+
+ if(error != FSE_OK) {
+ storage_cli_print_error(error);
+ } else {
+ printf(
+ "Storage, %luKB total, %luKB free\r\n",
+ (uint32_t)(total_space / 1024),
+ (uint32_t)(free_space / 1024));
+ }
+ } else {
+ FileInfo fileinfo;
+ FS_Error error = storage_common_stat(api, string_get_cstr(path), &fileinfo);
+
+ if(error == FSE_OK) {
+ if(fileinfo.flags & FSF_DIRECTORY) {
+ printf("Directory\r\n");
+ } else {
+ printf("File, size: %lub\r\n", (uint32_t)(fileinfo.size));
+ }
+ } else {
+ storage_cli_print_error(error);
+ }
+ }
+
+ furi_record_close("storage");
+}
+
void storage_cli_copy(Cli* cli, string_t old_path, string_t args) {
Storage* api = furi_record_open("storage");
string_t new_path;
@@ -297,6 +402,43 @@ void storage_cli_mkdir(Cli* cli, string_t path) {
furi_record_close("storage");
}
+void storage_cli_md5(Cli* cli, string_t path) {
+ Storage* api = furi_record_open("storage");
+ File* file = storage_file_alloc(api);
+
+ if(storage_file_open(file, string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) {
+ const uint16_t read_size = 512;
+ const uint8_t hash_size = 16;
+ uint8_t* data = malloc(read_size);
+ uint8_t* hash = malloc(sizeof(uint8_t) * hash_size);
+ md5_context* md5_ctx = malloc(sizeof(md5_context));
+
+ md5_starts(md5_ctx);
+ while(true) {
+ uint16_t readed_size = storage_file_read(file, data, read_size);
+ if(readed_size == 0) break;
+ md5_update(md5_ctx, data, readed_size);
+ }
+ md5_finish(md5_ctx, hash);
+ free(md5_ctx);
+
+ for(uint8_t i = 0; i < hash_size; i++) {
+ printf("%02x", hash[i]);
+ }
+ printf("\r\n");
+
+ free(hash);
+ free(data);
+ } else {
+ storage_cli_print_error(storage_file_get_error(file));
+ }
+
+ storage_file_close(file);
+ storage_file_free(file);
+
+ furi_record_close("storage");
+}
+
void storage_cli(Cli* cli, string_t args, void* context) {
string_t cmd;
string_t path;
@@ -334,8 +476,18 @@ void storage_cli(Cli* cli, string_t args, void* context) {
break;
}
+ if(string_cmp_str(cmd, "read_chunks") == 0) {
+ storage_cli_read_chunks(cli, path, args);
+ break;
+ }
+
if(string_cmp_str(cmd, "write") == 0) {
- storage_cli_write(cli, path, args);
+ storage_cli_write(cli, path);
+ break;
+ }
+
+ if(string_cmp_str(cmd, "write_chunk") == 0) {
+ storage_cli_write_chunk(cli, path, args);
break;
}
@@ -359,6 +511,16 @@ void storage_cli(Cli* cli, string_t args, void* context) {
break;
}
+ if(string_cmp_str(cmd, "md5") == 0) {
+ storage_cli_md5(cli, path);
+ break;
+ }
+
+ if(string_cmp_str(cmd, "stat") == 0) {
+ storage_cli_stat(cli, path);
+ break;
+ }
+
storage_cli_print_usage();
} while(false);
diff --git a/applications/storage/storage-processing.c b/applications/storage/storage-processing.c
index fd4cc08ca4d..0ab7f551aea 100644
--- a/applications/storage/storage-processing.c
+++ b/applications/storage/storage-processing.c
@@ -307,43 +307,67 @@ static FS_Error storage_process_common_remove(Storage* app, const char* path) {
return ret;
}
+static FS_Error storage_process_common_mkdir(Storage* app, const char* path) {
+ FS_Error ret = FSE_OK;
+ StorageType type = storage_get_type_by_path(path);
+
+ if(storage_type_is_not_valid(type)) {
+ ret = FSE_INVALID_NAME;
+ } else {
+ StorageData* storage = storage_get_storage_by_type(app, type);
+ FS_CALL(storage, common.mkdir(storage, remove_vfs(path)));
+ }
+
+ return ret;
+}
+
static FS_Error storage_process_common_copy(Storage* app, const char* old, const char* new) {
FS_Error ret = FSE_INTERNAL;
File file_old;
File file_new;
- do {
- if(!storage_process_file_open(app, &file_old, old, FSAM_READ, FSOM_OPEN_EXISTING)) {
- ret = storage_file_get_error(&file_old);
- storage_process_file_close(app, &file_old);
- break;
- }
-
- if(!storage_process_file_open(app, &file_new, new, FSAM_WRITE, FSOM_CREATE_NEW)) {
- ret = storage_file_get_error(&file_new);
- storage_process_file_close(app, &file_new);
- break;
- }
-
- const uint16_t buffer_size = 64;
- uint8_t* buffer = malloc(buffer_size);
- uint16_t readed_size = 0;
- uint16_t writed_size = 0;
-
- while(true) {
- readed_size = storage_process_file_read(app, &file_old, buffer, buffer_size);
- ret = storage_file_get_error(&file_old);
- if(readed_size == 0) break;
+ FileInfo fileinfo;
+ ret = storage_process_common_stat(app, old, &fileinfo);
- writed_size = storage_process_file_write(app, &file_new, buffer, readed_size);
- ret = storage_file_get_error(&file_new);
- if(writed_size < readed_size) break;
+ if(ret == FSE_OK) {
+ if(fileinfo.flags & FSF_DIRECTORY) {
+ ret = storage_process_common_mkdir(app, new);
+ } else {
+ do {
+ if(!storage_process_file_open(app, &file_old, old, FSAM_READ, FSOM_OPEN_EXISTING)) {
+ ret = storage_file_get_error(&file_old);
+ storage_process_file_close(app, &file_old);
+ break;
+ }
+
+ if(!storage_process_file_open(app, &file_new, new, FSAM_WRITE, FSOM_CREATE_NEW)) {
+ ret = storage_file_get_error(&file_new);
+ storage_process_file_close(app, &file_new);
+ storage_process_file_close(app, &file_old);
+ break;
+ }
+
+ const uint16_t buffer_size = 64;
+ uint8_t* buffer = malloc(buffer_size);
+ uint16_t readed_size = 0;
+ uint16_t writed_size = 0;
+
+ while(true) {
+ readed_size = storage_process_file_read(app, &file_old, buffer, buffer_size);
+ ret = storage_file_get_error(&file_old);
+ if(readed_size == 0) break;
+
+ writed_size = storage_process_file_write(app, &file_new, buffer, readed_size);
+ ret = storage_file_get_error(&file_new);
+ if(writed_size < readed_size) break;
+ }
+
+ free(buffer);
+ storage_process_file_close(app, &file_old);
+ storage_process_file_close(app, &file_new);
+ } while(false);
}
-
- free(buffer);
- storage_process_file_close(app, &file_old);
- storage_process_file_close(app, &file_new);
- } while(false);
+ }
return ret;
}
@@ -370,20 +394,6 @@ static FS_Error storage_process_common_rename(Storage* app, const char* old, con
return ret;
}
-static FS_Error storage_process_common_mkdir(Storage* app, const char* path) {
- FS_Error ret = FSE_OK;
- StorageType type = storage_get_type_by_path(path);
-
- if(storage_type_is_not_valid(type)) {
- ret = FSE_INVALID_NAME;
- } else {
- StorageData* storage = storage_get_storage_by_type(app, type);
- FS_CALL(storage, common.mkdir(storage, remove_vfs(path)));
- }
-
- return ret;
-}
-
static FS_Error storage_process_common_fs_info(
Storage* app,
const char* fs_path,
diff --git a/applications/subghz/scenes/subghz_scene_analyze.c b/applications/subghz/scenes/subghz_scene_analyze.c
index e598589361a..33a891f26bb 100644
--- a/applications/subghz/scenes/subghz_scene_analyze.c
+++ b/applications/subghz/scenes/subghz_scene_analyze.c
@@ -6,7 +6,11 @@ const void subghz_scene_analyze_on_enter(void* context) {
}
const bool subghz_scene_analyze_on_event(void* context, SceneManagerEvent event) {
- // SubGhz* subghz = context;
+ SubGhz* subghz = context;
+ if(event.type == SceneManagerEventTypeTick) {
+ notification_message(subghz->notifications, &sequence_blink_blue_10);
+ return true;
+ }
return false;
}
diff --git a/applications/subghz/scenes/subghz_scene_config.h b/applications/subghz/scenes/subghz_scene_config.h
index aa2ddd6adf0..460001d2714 100644
--- a/applications/subghz/scenes/subghz_scene_config.h
+++ b/applications/subghz/scenes/subghz_scene_config.h
@@ -10,3 +10,4 @@ ADD_SCENE(subghz, static, Static)
ADD_SCENE(subghz, test, Test)
ADD_SCENE(subghz, test_carrier, TestCarrier)
ADD_SCENE(subghz, test_packet, TestPacket)
+ADD_SCENE(subghz, set_type, SetType)
diff --git a/applications/subghz/scenes/subghz_scene_read.c b/applications/subghz/scenes/subghz_scene_read.c
index 02906ff81b2..7cab340d9c3 100644
--- a/applications/subghz/scenes/subghz_scene_read.c
+++ b/applications/subghz/scenes/subghz_scene_read.c
@@ -25,6 +25,7 @@ const void subghz_scene_read_on_enter(void* context) {
//Start CC1101 rx
subghz_begin(FuriHalSubGhzPresetOokAsync);
subghz_rx(433920000);
+
furi_hal_subghz_start_async_rx(subghz_worker_rx_callback, subghz->worker);
subghz_worker_start(subghz->worker);
subghz_protocol_enable_dump(subghz->protocol, subghz_read_protocol_callback, subghz);
@@ -36,9 +37,13 @@ const bool subghz_scene_read_on_event(void* context, SceneManagerEvent event) {
SubGhz* subghz = context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == GUBGHZ_READ_CUSTOM_EVENT) {
- scene_manager_next_scene(subghz->scene_manager, SubGhzViewReceiver);
+ scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiver);
+ notification_message(subghz->notifications, &sequence_success);
return true;
}
+ } else if(event.type == SceneManagerEventTypeTick) {
+ notification_message(subghz->notifications, &sequence_blink_blue_10);
+ return true;
}
return false;
}
@@ -46,7 +51,7 @@ const bool subghz_scene_read_on_event(void* context, SceneManagerEvent event) {
const void subghz_scene_read_on_exit(void* context) {
SubGhz* subghz = context;
- //Stop CC1101
+ // Stop CC1101
subghz_worker_stop(subghz->worker);
furi_hal_subghz_stop_async_rx();
subghz_end();
diff --git a/applications/subghz/scenes/subghz_scene_save_name.c b/applications/subghz/scenes/subghz_scene_save_name.c
index 329c6931fed..5a3452f824e 100644
--- a/applications/subghz/scenes/subghz_scene_save_name.c
+++ b/applications/subghz/scenes/subghz_scene_save_name.c
@@ -4,52 +4,6 @@
#define SCENE_SAVE_NAME_CUSTOM_EVENT (0UL)
-bool subghz_scene_save_data_to_file(void* context, const char* dev_name) {
- SubGhz* subghz = context;
- FileWorker* file_worker = file_worker_alloc(false);
- string_t dev_file_name;
- string_init(dev_file_name);
- string_t temp_str;
- string_init(temp_str);
- bool saved = false;
-
- do {
- // Create subghz folder directory if necessary
- if(!file_worker_mkdir(file_worker, SUBGHZ_APP_FOLDER)) {
- break;
- }
- // Create saved directory if necessary
- if(!file_worker_mkdir(file_worker, SUBGHZ_APP_PATH_FOLDER)) {
- break;
- }
- // First remove subghz device file if it was saved
- string_printf(
- dev_file_name, "%s/%s%s", SUBGHZ_APP_PATH_FOLDER, dev_name, SUBGHZ_APP_EXTENSION);
- if(!file_worker_remove(file_worker, string_get_cstr(dev_file_name))) {
- break;
- }
- // Open file
- if(!file_worker_open(
- file_worker, string_get_cstr(dev_file_name), FSAM_WRITE, FSOM_CREATE_ALWAYS)) {
- break;
- }
- //Get string save
- subghz->protocol_result->to_save_string(subghz->protocol_result, temp_str);
- // Prepare and write data to file
- if(!file_worker_write(file_worker, string_get_cstr(temp_str), string_size(temp_str))) {
- break;
- }
- saved = true;
- } while(0);
-
- string_clear(temp_str);
- string_clear(dev_file_name);
- file_worker_close(file_worker);
- file_worker_free(file_worker);
-
- return saved;
-}
-
void subghz_scene_save_name_text_input_callback(void* context) {
SubGhz* subghz = context;
view_dispatcher_send_custom_event(subghz->view_dispatcher, SCENE_SAVE_NAME_CUSTOM_EVENT);
@@ -81,7 +35,7 @@ const bool subghz_scene_save_name_on_event(void* context, SceneManagerEvent even
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SCENE_SAVE_NAME_CUSTOM_EVENT) {
- if(subghz_scene_save_data_to_file(subghz, subghz->text_store)) {
+ if(subghz_save_protocol_to_file(subghz, subghz->text_store)) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveSuccess);
return true;
} else {
diff --git a/applications/subghz/scenes/subghz_scene_saved.c b/applications/subghz/scenes/subghz_scene_saved.c
index d1dd058a7a9..09b7a4ac9ce 100644
--- a/applications/subghz/scenes/subghz_scene_saved.c
+++ b/applications/subghz/scenes/subghz_scene_saved.c
@@ -1,77 +1,9 @@
#include "../subghz_i.h"
-bool subghz_scene_saved_file_select(SubGhz* subghz) {
- furi_assert(subghz);
-
- FileWorker* file_worker = file_worker_alloc(false);
- string_t protocol_file_name;
- string_init(protocol_file_name);
- string_t temp_str;
- string_init(temp_str);
-
- // Input events and views are managed by file_select
- bool res = file_worker_file_select(
- file_worker,
- SUBGHZ_APP_PATH_FOLDER,
- SUBGHZ_APP_EXTENSION,
- subghz->text_store,
- sizeof(subghz->text_store),
- NULL);
-
- if(res) {
- // Get key file path
- string_printf(
- protocol_file_name,
- "%s/%s%s",
- SUBGHZ_APP_PATH_FOLDER,
- subghz->text_store,
- SUBGHZ_APP_EXTENSION);
- } else {
- string_clear(temp_str);
- string_clear(protocol_file_name);
-
- file_worker_close(file_worker);
- file_worker_free(file_worker);
- return res;
- }
-
- do {
- if(!file_worker_open(
- file_worker, string_get_cstr(protocol_file_name), FSAM_READ, FSOM_OPEN_EXISTING)) {
- break;
- }
- // Read and parse name protocol from 1st line
- if(!file_worker_read_until(file_worker, temp_str, '\n')) {
- break;
- }
- // strlen("Protocol: ") = 10
- string_right(temp_str, 10);
- subghz->protocol_result =
- subghz_protocol_get_by_name(subghz->protocol, string_get_cstr(temp_str));
- if(subghz->protocol_result == NULL) {
- file_worker_show_error(file_worker, "Cannot parse\nfile");
- break;
- }
- if(!subghz->protocol_result->to_load_protocol(file_worker, subghz->protocol_result)) {
- file_worker_show_error(file_worker, "Cannot parse\nfile");
- break;
- }
- res = true;
- } while(0);
-
- string_clear(temp_str);
- string_clear(protocol_file_name);
-
- file_worker_close(file_worker);
- file_worker_free(file_worker);
-
- return res;
-}
-
const void subghz_scene_saved_on_enter(void* context) {
SubGhz* subghz = context;
- if(subghz_scene_saved_file_select(subghz)) {
+ if(subghz_saved_protocol_select(subghz)) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneTransmitter);
} else {
scene_manager_search_and_switch_to_previous_scene(subghz->scene_manager, SubGhzSceneStart);
diff --git a/applications/subghz/scenes/subghz_scene_set_type.c b/applications/subghz/scenes/subghz_scene_set_type.c
new file mode 100644
index 00000000000..d3c36f54a86
--- /dev/null
+++ b/applications/subghz/scenes/subghz_scene_set_type.c
@@ -0,0 +1,173 @@
+#include "../subghz_i.h"
+#include "../lib/subghz/protocols/subghz_protocol_keeloq.h"
+
+enum SubmenuIndex {
+ SubmenuIndexPricenton,
+ SubmenuIndexNiceFlo12bit,
+ SubmenuIndexNiceFlo24bit,
+ SubmenuIndexCAME12bit,
+ SubmenuIndexCAME24bit,
+ SubmenuIndexNeroSketch,
+ SubmenuIndexGateTX,
+ SubmenuIndexDoorHan,
+};
+
+bool subghz_scene_set_type_submenu_to_find_protocol(void* context, const char* protocol_name) {
+ SubGhz* subghz = context;
+ subghz->protocol_result = subghz_protocol_get_by_name(subghz->protocol, protocol_name);
+ if(subghz->protocol_result == NULL) {
+ //show error
+ return false;
+ }
+ return true;
+}
+
+void subghz_scene_set_type_submenu_callback(void* context, uint32_t index) {
+ SubGhz* subghz = context;
+ view_dispatcher_send_custom_event(subghz->view_dispatcher, index);
+}
+
+const void subghz_scene_set_type_on_enter(void* context) {
+ SubGhz* subghz = context;
+
+ submenu_add_item(
+ subghz->submenu,
+ "Pricenton",
+ SubmenuIndexPricenton,
+ subghz_scene_set_type_submenu_callback,
+ subghz);
+ submenu_add_item(
+ subghz->submenu,
+ "Nice Flo 12bit",
+ SubmenuIndexNiceFlo12bit,
+ subghz_scene_set_type_submenu_callback,
+ subghz);
+ submenu_add_item(
+ subghz->submenu,
+ "Nice Flo 24bit",
+ SubmenuIndexNiceFlo24bit,
+ subghz_scene_set_type_submenu_callback,
+ subghz);
+ submenu_add_item(
+ subghz->submenu,
+ "CAME 12bit",
+ SubmenuIndexCAME12bit,
+ subghz_scene_set_type_submenu_callback,
+ subghz);
+ submenu_add_item(
+ subghz->submenu,
+ "CAME 24bit",
+ SubmenuIndexCAME24bit,
+ subghz_scene_set_type_submenu_callback,
+ subghz);
+ // submenu_add_item(
+ // subghz->submenu, "Nero Sketch", SubmenuIndexNeroSketch, subghz_scene_set_type_submenu_callback, subghz);
+ submenu_add_item(
+ subghz->submenu,
+ "Gate TX",
+ SubmenuIndexGateTX,
+ subghz_scene_set_type_submenu_callback,
+ subghz);
+ submenu_add_item(
+ subghz->submenu,
+ "DoorHan",
+ SubmenuIndexDoorHan,
+ subghz_scene_set_type_submenu_callback,
+ subghz);
+
+ submenu_set_selected_item(
+ subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneSetType));
+
+ view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewMenu);
+}
+
+const bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
+ SubGhz* subghz = context;
+ bool generated_protocol = false;
+
+ if(event.type == SceneManagerEventTypeCustom) {
+ uint32_t key = subghz_random_serial();
+ switch(event.event) {
+ case SubmenuIndexPricenton:
+ if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "Princeton")) {
+ subghz->protocol_result->code_last_count_bit = 24;
+ key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
+ subghz->protocol_result->code_last_found = key;
+ generated_protocol = true;
+ }
+ break;
+ case SubmenuIndexNiceFlo12bit:
+ if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "Nice FLO")) {
+ subghz->protocol_result->code_last_count_bit = 12;
+ key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4
+ subghz->protocol_result->code_last_found = key;
+ generated_protocol = true;
+ }
+ break;
+ case SubmenuIndexNiceFlo24bit:
+ if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "Nice FLO")) {
+ subghz->protocol_result->code_last_count_bit = 24;
+ key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
+ subghz->protocol_result->code_last_found = key;
+ generated_protocol = true;
+ }
+ break;
+ case SubmenuIndexCAME12bit:
+ if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "CAME")) {
+ subghz->protocol_result->code_last_count_bit = 12;
+ key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4
+ subghz->protocol_result->code_last_found = key;
+ generated_protocol = true;
+ }
+ break;
+ case SubmenuIndexCAME24bit:
+ if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "CAME")) {
+ subghz->protocol_result->code_last_count_bit = 24;
+ key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
+ subghz->protocol_result->code_last_found = key;
+ generated_protocol = true;
+ }
+ break;
+ // case SubmenuIndexNeroSketch:
+ // /* code */
+ // break;
+ case SubmenuIndexGateTX:
+ if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "GateTX")) {
+ subghz->protocol_result->code_last_count_bit = 24;
+ key = (key & 0x00F0FFFF) | 0xF << 16; //btn 0xF, 0xC, 0xA, 0x6
+ subghz->protocol_result->code_last_found = subghz_protocol_common_reverse_key(
+ key, subghz->protocol_result->code_last_count_bit);
+ generated_protocol = true;
+ }
+ break;
+ case SubmenuIndexDoorHan:
+ if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "KeeLoq")) {
+ subghz->protocol_result->code_last_count_bit = 64;
+ subghz->protocol_result->serial = key & 0x0FFFFFFF;
+ subghz->protocol_result->btn = 0x2; //btn 0x1, 0x2, 0x4, 0x8
+ subghz->protocol_result->cnt = 0x0003;
+ subghz_protocol_keeloq_set_manufacture_name(subghz->protocol_result, "DoorHan");
+ subghz->protocol_result->code_last_found =
+ subghz_protocol_keeloq_gen_key(subghz->protocol_result);
+
+ generated_protocol = true;
+ }
+ break;
+
+ default:
+ return false;
+ break;
+ }
+ if(generated_protocol) {
+ scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+const void subghz_scene_set_type_on_exit(void* context) {
+ SubGhz* subghz = context;
+ submenu_clean(subghz->submenu);
+}
diff --git a/applications/subghz/scenes/subghz_scene_start.c b/applications/subghz/scenes/subghz_scene_start.c
index 88b69962107..d30536a529a 100644
--- a/applications/subghz/scenes/subghz_scene_start.c
+++ b/applications/subghz/scenes/subghz_scene_start.c
@@ -6,6 +6,7 @@ enum SubmenuIndex {
SubmenuIndexSaved,
SubmenuIndexStatic,
SubmenuIndexTest,
+ SubmenuIndexAddManualy,
};
void subghz_scene_start_submenu_callback(void* context, uint32_t index) {
@@ -15,7 +16,9 @@ void subghz_scene_start_submenu_callback(void* context, uint32_t index) {
const void subghz_scene_start_on_enter(void* context) {
SubGhz* subghz = context;
-
+ if(subghz->state_notifications == NOTIFICATION_STARTING_STATE) {
+ subghz->state_notifications = NOTIFICATION_IDLE_STATE;
+ }
submenu_add_item(
subghz->submenu,
"Analyze",
@@ -26,6 +29,12 @@ const void subghz_scene_start_on_enter(void* context) {
subghz->submenu, "Read", SubmenuIndexRead, subghz_scene_start_submenu_callback, subghz);
submenu_add_item(
subghz->submenu, "Saved", SubmenuIndexSaved, subghz_scene_start_submenu_callback, subghz);
+ submenu_add_item(
+ subghz->submenu,
+ "Add manually",
+ SubmenuIndexAddManualy,
+ subghz_scene_start_submenu_callback,
+ subghz);
submenu_add_item(
subghz->submenu, "Static", SubmenuIndexStatic, subghz_scene_start_submenu_callback, subghz);
submenu_add_item(
@@ -56,6 +65,11 @@ const bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) {
subghz->scene_manager, SubGhzSceneStart, SubmenuIndexSaved);
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaved);
return true;
+ } else if(event.event == SubmenuIndexAddManualy) {
+ scene_manager_set_scene_state(
+ subghz->scene_manager, SubGhzSceneStart, SubmenuIndexAddManualy);
+ scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetType);
+ return true;
} else if(event.event == SubmenuIndexStatic) {
scene_manager_set_scene_state(
subghz->scene_manager, SubGhzSceneStart, SubmenuIndexStatic);
diff --git a/applications/subghz/scenes/subghz_scene_transmitter.c b/applications/subghz/scenes/subghz_scene_transmitter.c
index c2c9ce511ed..e28e6d88c08 100644
--- a/applications/subghz/scenes/subghz_scene_transmitter.c
+++ b/applications/subghz/scenes/subghz_scene_transmitter.c
@@ -1,28 +1,5 @@
#include "../subghz_i.h"
#include "../views/subghz_transmitter.h"
-#include "lib/subghz/protocols/subghz_protocol_princeton.h"
-
-void subghz_scene_transmitter_tx(void* context) {
- SubGhz* subghz = context;
- SubGhzEncoderPrinceton* encoder = subghz_encoder_princeton_alloc();
-
- subghz_encoder_princeton_reset(encoder, subghz->protocol_result->code_last_found, 4);
- subghz_encoder_princeton_set_te(encoder, subghz->protocol_result);
-
- subghz_begin(FuriHalSubGhzPresetOokAsync);
- subghz_tx(433920000);
-
- furi_hal_subghz_start_async_tx(subghz_encoder_princeton_yield, encoder);
-
- while(!furi_hal_subghz_is_async_tx_complete()) {
- osDelay(20);
- }
-
- //Stop tx
- furi_hal_subghz_stop_async_tx();
- subghz_end();
- subghz_encoder_princeton_free(encoder);
-}
void subghz_scene_transmitter_callback(SubghzTransmitterEvent event, void* context) {
furi_assert(context);
@@ -35,24 +12,36 @@ const void subghz_scene_transmitter_on_enter(void* context) {
SubghzTransmitter* subghz_transmitter = subghz->subghz_transmitter;
subghz_transmitter_set_callback(subghz_transmitter, subghz_scene_transmitter_callback, subghz);
-
subghz_transmitter_set_protocol(subghz_transmitter, subghz->protocol_result);
+
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewTransmitter);
+
+ subghz->state_notifications = NOTIFICATION_IDLE_STATE;
}
const bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {
SubGhz* subghz = context;
if(event.type == SceneManagerEventTypeCustom) {
- if(event.event == SubghzTransmitterEventSend) {
- //scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName);
- subghz_scene_transmitter_tx(subghz);
+ if(event.event == SubghzTransmitterEventSendStart) {
+ subghz->state_notifications = NOTIFICATION_TX_STATE;
+ subghz_transmitter_tx_start(subghz);
+ return true;
+ } else if(event.event == SubghzTransmitterEventSendStop) {
+ subghz->state_notifications = NOTIFICATION_IDLE_STATE;
+ subghz_transmitter_tx_stop(subghz);
return true;
} else if(event.event == SubghzTransmitterEventBack) {
+ subghz->state_notifications = NOTIFICATION_IDLE_STATE;
scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneStart);
return true;
}
+ } else if(event.type == SceneManagerEventTypeTick) {
+ if(subghz->state_notifications == NOTIFICATION_TX_STATE) {
+ notification_message(subghz->notifications, &sequence_blink_red_10);
+ }
+ return true;
}
return false;
}
@@ -60,6 +49,6 @@ const bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent ev
const void subghz_scene_transmitter_on_exit(void* context) {
SubGhz* subghz = context;
SubghzTransmitter* subghz_transmitter = subghz->subghz_transmitter;
-
subghz_transmitter_set_callback(subghz_transmitter, NULL, subghz);
+ subghz->state_notifications = NOTIFICATION_IDLE_STATE;
}
diff --git a/applications/subghz/subghz.c b/applications/subghz/subghz.c
index bf45208bf5a..acc054ab8a1 100644
--- a/applications/subghz/subghz.c
+++ b/applications/subghz/subghz.c
@@ -62,6 +62,9 @@ SubGhz* subghz_alloc() {
view_dispatcher_set_tick_event_callback(
subghz->view_dispatcher, subghz_tick_event_callback, 100);
+ // Open Notification record
+ subghz->notifications = furi_record_open("notification");
+
// SubMenu
subghz->submenu = submenu_alloc();
view_dispatcher_add_view(
@@ -196,6 +199,10 @@ void subghz_free(SubGhz* subghz) {
subghz_protocol_free(subghz->protocol);
subghz_worker_free(subghz->worker);
+ // Notifications
+ furi_record_close("notification");
+ subghz->notifications = NULL;
+
// The rest
free(subghz);
}
diff --git a/applications/subghz/subghz_cli.c b/applications/subghz/subghz_cli.c
index 9681fdef3c2..0e4eb7fe044 100644
--- a/applications/subghz/subghz_cli.c
+++ b/applications/subghz/subghz_cli.c
@@ -4,6 +4,7 @@
#include
#include
#include
+#include
#include
#define SUBGHZ_FREQUENCY_RANGE_STR \
@@ -129,25 +130,29 @@ void subghz_cli_command_tx(Cli* cli, string_t args, void* context) {
key,
repeat);
- SubGhzEncoderPrinceton* encoder = subghz_encoder_princeton_alloc();
- subghz_encoder_princeton_reset(encoder, key, repeat);
+ SubGhzDecoderPrinceton* protocol = subghz_decoder_princeton_alloc();
+ protocol->common.code_last_found = key;
+ protocol->common.code_last_count_bit = 24;
+ SubGhzProtocolEncoderCommon* encoder = subghz_protocol_encoder_common_alloc();
+ encoder->repeat = repeat;
+
+ subghz_protocol_princeton_send_key(protocol, encoder);
furi_hal_subghz_reset();
furi_hal_subghz_load_preset(FuriHalSubGhzPresetOokAsync);
frequency = furi_hal_subghz_set_frequency_and_path(frequency);
+ furi_hal_subghz_start_async_tx(subghz_protocol_encoder_common_yield, encoder);
- furi_hal_subghz_start_async_tx(subghz_encoder_princeton_yield, encoder);
-
- while(!furi_hal_subghz_is_async_tx_complete()) {
+ while(!(furi_hal_subghz_is_async_tx_complete() || cli_cmd_interrupt_received(cli))) {
printf(".");
fflush(stdout);
osDelay(333);
}
-
furi_hal_subghz_stop_async_tx();
-
furi_hal_subghz_sleep();
- subghz_encoder_princeton_free(encoder);
+
+ subghz_decoder_princeton_free(protocol);
+ subghz_protocol_encoder_common_free(encoder);
}
typedef struct {
diff --git a/applications/subghz/subghz_i.c b/applications/subghz/subghz_i.c
index 359b2651d49..03ebbc268d6 100644
--- a/applications/subghz/subghz_i.c
+++ b/applications/subghz/subghz_i.c
@@ -7,6 +7,7 @@
#include
#include
#include "file-worker.h"
+#include "../notification/notification.h"
void subghz_begin(FuriHalSubGhzPreset preset) {
furi_hal_subghz_reset();
@@ -39,6 +40,34 @@ void subghz_end(void) {
furi_hal_subghz_sleep();
}
+void subghz_transmitter_tx_start(void* context) {
+ SubGhz* subghz = context;
+ subghz->encoder = subghz_protocol_encoder_common_alloc();
+ subghz->encoder->repeat = 200; //max repeat with the button held down
+ //get upload
+ if(subghz->protocol_result->get_upload_protocol) {
+ if(subghz->protocol_result->get_upload_protocol(subghz->protocol_result, subghz->encoder)) {
+ subghz_begin(FuriHalSubGhzPresetOokAsync);
+ subghz_tx(433920000);
+ //Start TX
+ furi_hal_subghz_start_async_tx(subghz_protocol_encoder_common_yield, subghz->encoder);
+ }
+ }
+}
+
+void subghz_transmitter_tx_stop(void* context) {
+ SubGhz* subghz = context;
+ //Stop TX
+ furi_hal_subghz_stop_async_tx();
+ subghz_end();
+ subghz_protocol_encoder_common_free(subghz->encoder);
+ //if protocol dynamic then we save the last upload
+ if(subghz->protocol_result->type_protocol == TYPE_PROTOCOL_DYNAMIC) {
+ subghz_save_protocol_to_file(subghz, subghz->text_store);
+ }
+ notification_message(subghz->notifications, &sequence_reset_red);
+}
+
bool subghz_key_load(SubGhz* subghz, const char* file_path) {
furi_assert(subghz);
furi_assert(file_path);
@@ -81,3 +110,127 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path) {
return loaded;
}
+
+bool subghz_save_protocol_to_file(void* context, const char* dev_name) {
+ SubGhz* subghz = context;
+ FileWorker* file_worker = file_worker_alloc(false);
+ string_t dev_file_name;
+ string_init(dev_file_name);
+ string_t temp_str;
+ string_init(temp_str);
+ bool saved = false;
+
+ do {
+ // Create subghz folder directory if necessary
+ if(!file_worker_mkdir(file_worker, SUBGHZ_APP_FOLDER)) {
+ break;
+ }
+ // Create saved directory if necessary
+ if(!file_worker_mkdir(file_worker, SUBGHZ_APP_PATH_FOLDER)) {
+ break;
+ }
+ // First remove subghz device file if it was saved
+ string_printf(
+ dev_file_name, "%s/%s%s", SUBGHZ_APP_PATH_FOLDER, dev_name, SUBGHZ_APP_EXTENSION);
+ if(!file_worker_remove(file_worker, string_get_cstr(dev_file_name))) {
+ break;
+ }
+ // Open file
+ if(!file_worker_open(
+ file_worker, string_get_cstr(dev_file_name), FSAM_WRITE, FSOM_CREATE_ALWAYS)) {
+ break;
+ }
+ //Get string save
+ subghz->protocol_result->to_save_string(subghz->protocol_result, temp_str);
+ // Prepare and write data to file
+ if(!file_worker_write(file_worker, string_get_cstr(temp_str), string_size(temp_str))) {
+ break;
+ }
+ saved = true;
+ } while(0);
+
+ string_clear(temp_str);
+ string_clear(dev_file_name);
+ file_worker_close(file_worker);
+ file_worker_free(file_worker);
+
+ return saved;
+}
+
+bool subghz_saved_protocol_select(SubGhz* subghz) {
+ furi_assert(subghz);
+
+ FileWorker* file_worker = file_worker_alloc(false);
+ string_t protocol_file_name;
+ string_init(protocol_file_name);
+ string_t temp_str;
+ string_init(temp_str);
+
+ // Input events and views are managed by file_select
+ bool res = file_worker_file_select(
+ file_worker,
+ SUBGHZ_APP_PATH_FOLDER,
+ SUBGHZ_APP_EXTENSION,
+ subghz->text_store,
+ sizeof(subghz->text_store),
+ NULL);
+
+ if(res) {
+ // Get key file path
+ string_printf(
+ protocol_file_name,
+ "%s/%s%s",
+ SUBGHZ_APP_PATH_FOLDER,
+ subghz->text_store,
+ SUBGHZ_APP_EXTENSION);
+ } else {
+ string_clear(temp_str);
+ string_clear(protocol_file_name);
+
+ file_worker_close(file_worker);
+ file_worker_free(file_worker);
+ return res;
+ }
+ res = false;
+ do {
+ if(!file_worker_open(
+ file_worker, string_get_cstr(protocol_file_name), FSAM_READ, FSOM_OPEN_EXISTING)) {
+ break;
+ }
+ // Read and parse name protocol from 1st line
+ if(!file_worker_read_until(file_worker, temp_str, '\n')) {
+ break;
+ }
+ // strlen("Protocol: ") = 10
+ string_right(temp_str, 10);
+ subghz->protocol_result =
+ subghz_protocol_get_by_name(subghz->protocol, string_get_cstr(temp_str));
+ if(subghz->protocol_result == NULL) {
+ file_worker_show_error(file_worker, "Cannot parse\nfile");
+ break;
+ }
+ if(!subghz->protocol_result->to_load_protocol(file_worker, subghz->protocol_result)) {
+ file_worker_show_error(file_worker, "Cannot parse\nfile");
+ break;
+ }
+ res = true;
+ } while(0);
+
+ string_clear(temp_str);
+ string_clear(protocol_file_name);
+
+ file_worker_close(file_worker);
+ file_worker_free(file_worker);
+
+ return res;
+}
+
+uint32_t subghz_random_serial(void) {
+ static bool rand_generator_inited = false;
+
+ if(!rand_generator_inited) {
+ srand(DWT->CYCCNT);
+ rand_generator_inited = true;
+ }
+ return (uint32_t)rand();
+}
diff --git a/applications/subghz/subghz_i.h b/applications/subghz/subghz_i.h
index a7a86a8ca7a..8149363d2c6 100644
--- a/applications/subghz/subghz_i.h
+++ b/applications/subghz/subghz_i.h
@@ -13,6 +13,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -27,16 +28,22 @@
#define SUBGHZ_TEXT_STORE_SIZE 128
+#define NOTIFICATION_STARTING_STATE 0u
+#define NOTIFICATION_IDLE_STATE 1u
+#define NOTIFICATION_TX_STATE 2u
+
extern const uint32_t subghz_frequencies[];
extern const uint32_t subghz_frequencies_count;
extern const uint32_t subghz_frequencies_433_92;
struct SubGhz {
Gui* gui;
+ NotificationApp* notifications;
SubGhzWorker* worker;
SubGhzProtocol* protocol;
SubGhzProtocolCommon* protocol_result;
+ SubGhzProtocolEncoderCommon* encoder;
SceneManager* scene_manager;
@@ -47,6 +54,7 @@ struct SubGhz {
Popup* popup;
TextInput* text_input;
char text_store[SUBGHZ_TEXT_STORE_SIZE + 1];
+ uint8_t state_notifications;
SubghzAnalyze* subghz_analyze;
SubghzReceiver* subghz_receiver;
@@ -77,4 +85,9 @@ void subghz_rx(uint32_t frequency);
void subghz_tx(uint32_t frequency);
void subghz_idle(void);
void subghz_end(void);
-bool subghz_key_load(SubGhz* subghz, const char* file_path);
\ No newline at end of file
+void subghz_transmitter_tx_start(void* context);
+void subghz_transmitter_tx_stop(void* context);
+bool subghz_key_load(SubGhz* subghz, const char* file_path);
+bool subghz_save_protocol_to_file(void* context, const char* dev_name);
+bool subghz_saved_protocol_select(SubGhz* subghz);
+uint32_t subghz_random_serial(void);
diff --git a/applications/subghz/views/subghz_receiver.c b/applications/subghz/views/subghz_receiver.c
index 11b030d1f14..a4d9aef7ce2 100644
--- a/applications/subghz/views/subghz_receiver.c
+++ b/applications/subghz/views/subghz_receiver.c
@@ -47,7 +47,8 @@ void subghz_receiver_draw(Canvas* canvas, SubghzReceiverModel* model) {
elements_multiline_text(canvas, 0, 10, string_get_cstr(model->text));
elements_button_left(canvas, "Back");
- if(model->protocol && model->protocol->to_save_string) {
+ if(model->protocol && model->protocol->to_save_string &&
+ strcmp(model->protocol->name, "KeeLoq")) {
elements_button_right(canvas, "Save");
}
}
@@ -61,7 +62,9 @@ bool subghz_receiver_input(InputEvent* event, void* context) {
bool can_be_saved = false;
with_view_model(
subghz_receiver->view, (SubghzReceiverModel * model) {
- can_be_saved = (model->protocol && model->protocol->to_save_string);
+ can_be_saved =
+ (model->protocol && model->protocol->to_save_string &&
+ strcmp(model->protocol->name, "KeeLoq"));
return false;
});
diff --git a/applications/subghz/views/subghz_static.c b/applications/subghz/views/subghz_static.c
index 52bf0ae676f..d8937bf385f 100644
--- a/applications/subghz/views/subghz_static.c
+++ b/applications/subghz/views/subghz_static.c
@@ -89,7 +89,7 @@ bool subghz_static_input(InputEvent* event, void* context) {
NotificationApp* notification = furi_record_open("notification");
notification_message_block(notification, &sequence_set_red_255);
- subghz_encoder_princeton_reset(
+ subghz_encoder_princeton_set(
instance->encoder, subghz_static_keys[model->button], 20);
furi_hal_subghz_start_async_tx(
subghz_encoder_princeton_yield, instance->encoder);
diff --git a/applications/subghz/views/subghz_test_packet.c b/applications/subghz/views/subghz_test_packet.c
index 44841af2b2c..a15cc33f0dc 100644
--- a/applications/subghz/views/subghz_test_packet.c
+++ b/applications/subghz/views/subghz_test_packet.c
@@ -153,7 +153,7 @@ static bool subghz_test_packet_input(InputEvent* event, void* context) {
if(model->status == SubghzTestPacketModelStatusRx) {
furi_hal_subghz_start_async_rx(subghz_test_packet_rx_callback, instance);
} else {
- subghz_encoder_princeton_reset(instance->encoder, 0x00AABBCC, 1000);
+ subghz_encoder_princeton_set(instance->encoder, 0x00AABBCC, 1000);
furi_hal_subghz_start_async_tx(subghz_encoder_princeton_yield, instance->encoder);
}
diff --git a/applications/subghz/views/subghz_transmitter.c b/applications/subghz/views/subghz_transmitter.c
index 703d00d894a..1ba76d9761e 100644
--- a/applications/subghz/views/subghz_transmitter.c
+++ b/applications/subghz/views/subghz_transmitter.c
@@ -48,19 +48,31 @@ void subghz_transmitter_draw(Canvas* canvas, SubghzTransmitterModel* model) {
canvas_set_font(canvas, FontSecondary);
elements_multiline_text(canvas, 0, 10, string_get_cstr(model->text));
- elements_button_center(canvas, "Send");
+ if(model->protocol && model->protocol->get_upload_protocol) {
+ elements_button_center(canvas, "Send");
+ }
}
bool subghz_transmitter_input(InputEvent* event, void* context) {
furi_assert(context);
SubghzTransmitter* subghz_transmitter = context;
-
- if(event->type != InputTypeShort) return false;
+ bool can_be_send = false;
+ with_view_model(
+ subghz_transmitter->view, (SubghzTransmitterModel * model) {
+ can_be_send = (model->protocol && model->protocol->get_upload_protocol);
+ string_clean(model->text);
+ model->protocol->to_string(model->protocol, model->text);
+ return true;
+ });
+ //if(event->type != InputTypeShort) return false;
if(event->key == InputKeyBack) {
return false;
- } else if(event->key == InputKeyOk) {
- subghz_transmitter->callback(SubghzTransmitterEventSend, subghz_transmitter->context);
+ } else if(can_be_send && event->key == InputKeyOk && event->type == InputTypePress) {
+ subghz_transmitter->callback(SubghzTransmitterEventSendStart, subghz_transmitter->context);
+ return true;
+ } else if(can_be_send && event->key == InputKeyOk && event->type == InputTypeRelease) {
+ subghz_transmitter->callback(SubghzTransmitterEventSendStop, subghz_transmitter->context);
return true;
}
diff --git a/applications/subghz/views/subghz_transmitter.h b/applications/subghz/views/subghz_transmitter.h
index ffd2737392e..2c1f1b720d2 100644
--- a/applications/subghz/views/subghz_transmitter.h
+++ b/applications/subghz/views/subghz_transmitter.h
@@ -4,7 +4,8 @@
#include
typedef enum {
- SubghzTransmitterEventSend,
+ SubghzTransmitterEventSendStart,
+ SubghzTransmitterEventSendStop,
SubghzTransmitterEventBack,
} SubghzTransmitterEvent;
diff --git a/assets/ReadMe.md b/assets/ReadMe.md
index 8ba044bdcf0..307c27dc66d 100644
--- a/assets/ReadMe.md
+++ b/assets/ReadMe.md
@@ -6,7 +6,9 @@
# Compiling
- make all
+```bash
+make all
+```
# Asset naming rules
diff --git a/assets/compiled/assets_icons.c b/assets/compiled/assets_icons.c
index f76f05c976d..8a2d5b35c8f 100644
--- a/assets/compiled/assets_icons.c
+++ b/assets/compiled/assets_icons.c
@@ -2,42 +2,6 @@
#include
-const uint8_t _A_FX_Sitting_40x27_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x7C,0x08,0x00,0x00,0x00,0x02,0x09,0x00,0x00,0x00,0x3E,0x08,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0xE0,0x0F,0x05,0x00,0x00,0x5F,0x05,0x02,0x00,0xE0,0xAA,0x4A,0x02,0x00,0x18,0x55,0x45,0x04,0x00,0x04,0x00,0x80,0x05,0x00,0x82,0xFF,0x7F,0x05,0xFC,0x79,0x00,0x00,0x06,0x18,0x04,0x00,0x00,0x04,0x60,0x02,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,};
-const uint8_t _A_FX_Sitting_40x27_1[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x7C,0x08,0x00,0x00,0x00,0x02,0x08,0x00,0x00,0x00,0x3E,0x08,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0xE0,0x0F,0x05,0x00,0x00,0x5F,0x05,0x02,0x00,0xE0,0xAA,0x4A,0x02,0x00,0x18,0x55,0x45,0x04,0x00,0x04,0x00,0x80,0x05,0x00,0x82,0xFF,0x7F,0x05,0xFC,0x79,0x00,0x00,0x06,0x18,0x04,0x00,0x00,0x04,0x60,0x02,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,};
-const uint8_t *_A_FX_Sitting_40x27[] = {_A_FX_Sitting_40x27_0,_A_FX_Sitting_40x27_1};
-
-const uint8_t _A_MDIB_32x32_0[] = {0x00,0x80,0x0F,0x00,0x00,0xC0,0xFF,0x01,0x00,0xE0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF0,0xFF,0x00,0x00,0xF8,0x7F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFE,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF0,0x01,0x00,0x00,0xF0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t _A_MDIB_32x32_1[] = {0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xE0,0xFF,0x01,0x00,0xE0,0xFF,0x03,0x00,0xE0,0xFF,0x03,0x00,0xC0,0xFF,0x07,0x00,0x80,0xFF,0x07,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFE,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF0,0x01,0x00,0x00,0xF0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t _A_MDIB_32x32_2[] = {0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xE0,0xFF,0x01,0x00,0xE0,0xFF,0x03,0x00,0xE0,0xFF,0x03,0x00,0xC0,0xFF,0x07,0x00,0x80,0xFF,0x07,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFE,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF0,0x01,0x00,0x00,0xF0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t _A_MDIB_32x32_3[] = {0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0xE0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF8,0xFF,0x00,0x00,0xF8,0x7F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFE,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF0,0x01,0x00,0x00,0xF0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t *_A_MDIB_32x32[] = {_A_MDIB_32x32_0,_A_MDIB_32x32_1,_A_MDIB_32x32_2,_A_MDIB_32x32_3};
-
-const uint8_t _A_MDI_32x32_0[] = {0x00,0x80,0x0F,0x00,0x00,0x40,0xF0,0x01,0x00,0x60,0x04,0x01,0x00,0x30,0x70,0x01,0x00,0x10,0x80,0x00,0x00,0x08,0x7E,0x00,0x00,0x08,0x17,0x00,0x00,0x04,0x15,0x00,0x00,0x84,0x0A,0x00,0x00,0x42,0x09,0x00,0x00,0xAA,0x0A,0x00,0x00,0x69,0x09,0x00,0x00,0xA9,0x0A,0x00,0x00,0x69,0x0D,0x00,0x00,0xAA,0x02,0x00,0x00,0x6C,0x03,0x00,0x00,0xA4,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xA8,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xA0,0x04,0x00,0x00,0x60,0x05,0x00,0x00,0x60,0x05,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t _A_MDI_32x32_1[] = {0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xE0,0x83,0x01,0x00,0x20,0x88,0x03,0x00,0xA0,0x03,0x02,0x00,0x40,0x00,0x04,0x00,0x80,0x9F,0x04,0x00,0x00,0x62,0x09,0x00,0x00,0xC2,0x08,0x00,0x00,0x42,0x09,0x00,0x00,0xAA,0x0A,0x00,0x00,0x69,0x09,0x00,0x00,0xA9,0x0A,0x00,0x00,0x69,0x0D,0x00,0x00,0xAA,0x02,0x00,0x00,0x6C,0x03,0x00,0x00,0xA4,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xA8,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xA0,0x04,0x00,0x00,0x60,0x05,0x00,0x00,0x60,0x05,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t _A_MDI_32x32_2[] = {0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xE0,0x83,0x01,0x00,0x20,0x88,0x03,0x00,0xA0,0x03,0x02,0x00,0x40,0x00,0x04,0x00,0x80,0x9F,0x04,0x00,0x00,0x62,0x09,0x00,0x00,0xC2,0x08,0x00,0x00,0x42,0x09,0x00,0x00,0xAA,0x0A,0x00,0x00,0x69,0x09,0x00,0x00,0xA9,0x0A,0x00,0x00,0x69,0x0D,0x00,0x00,0xAA,0x02,0x00,0x00,0x6C,0x03,0x00,0x00,0xA4,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xA8,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xA0,0x04,0x00,0x00,0x60,0x05,0x00,0x00,0x60,0x05,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t _A_MDI_32x32_3[] = {0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x60,0xF0,0x01,0x00,0x70,0x04,0x01,0x00,0x10,0x70,0x01,0x00,0x08,0x80,0x00,0x00,0x08,0x7E,0x00,0x00,0x04,0x15,0x00,0x00,0x84,0x12,0x00,0x00,0x42,0x09,0x00,0x00,0xAA,0x0A,0x00,0x00,0x69,0x09,0x00,0x00,0xA9,0x0A,0x00,0x00,0x69,0x0D,0x00,0x00,0xAA,0x02,0x00,0x00,0x6C,0x03,0x00,0x00,0xA4,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xA8,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xA0,0x04,0x00,0x00,0x60,0x05,0x00,0x00,0x60,0x05,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t *_A_MDI_32x32[] = {_A_MDI_32x32_0,_A_MDI_32x32_1,_A_MDI_32x32_2,_A_MDI_32x32_3};
-
-const uint8_t _A_MDWLB_32x32_0[] = {0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x80,0xFF,0x07,0x00,0x80,0xFF,0x0F,0x00,0x80,0xFF,0x0F,0x00,0x00,0xFF,0x1F,0x00,0x00,0xFE,0x1F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x7F,0x00,0x00,0xF8,0x7F,0x00,0x00,0xF8,0xFF,0x00,0x00,0xF8,0xFF,0x00,0x00,0xFC,0xFF,0x00,0x00,0xDC,0x7F,0x00,0x00,0xCC,0x3F,0x00,0x00,0xC0,0x3F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x0F,0x00,0x00,0xC0,0x0F,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x0F,0x00,0x00,0xC0,0x0F,0x00,0x00,0x80,0x0F,0x00,0x00,0x80,0x0D,0x00,0x00,0x00,0x09,0x00,};
-const uint8_t _A_MDWLB_32x32_1[] = {0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x80,0xFF,0x07,0x00,0x80,0xFF,0x0F,0x00,0x80,0xFF,0x0F,0x00,0x00,0xFF,0x1F,0x00,0x00,0xFE,0x1F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x7F,0x00,0x00,0xF0,0x7F,0x00,0x00,0xF0,0xFF,0x00,0x00,0xF0,0xFF,0x00,0x00,0xF8,0xFF,0x00,0x00,0xF8,0x7F,0x00,0x00,0xD8,0x3F,0x00,0x00,0xC0,0x3F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x0F,0x00,0x00,0xC0,0x0F,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xE0,0x07,0x00,0x00,0xE0,0x07,0x00,0x00,0xF0,0x0F,0x00,0x00,0xF0,0x0F,0x00,0x00,0x38,0x0F,0x00,0x00,0x08,0x1C,0x00,0x00,0x04,0x10,0x00,};
-const uint8_t _A_MDWLB_32x32_2[] = {0x00,0xF0,0x01,0x00,0x80,0xFF,0x03,0x00,0x80,0xFF,0x07,0x00,0x80,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFE,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xFC,0x3F,0x00,0x00,0xFC,0x7F,0x00,0x00,0xFC,0x7F,0x00,0x00,0xFE,0xFF,0x00,0x00,0xFE,0xFF,0x00,0x00,0xEE,0xFF,0x00,0x00,0xC6,0xFF,0x00,0x00,0xC2,0x7F,0x00,0x00,0xC0,0x3F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x1F,0x00,0x00,0x80,0x0F,0x00,0x00,0xC0,0x0F,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xE0,0x07,0x00,0x00,0xE0,0x06,0x00,0x00,0xE0,0x06,0x00,0x00,0x60,0x04,0x00,};
-const uint8_t *_A_MDWLB_32x32[] = {_A_MDWLB_32x32_0,_A_MDWLB_32x32_1,_A_MDWLB_32x32_2};
-
-const uint8_t _A_MDWL_32x32_0[] = {0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x80,0x0F,0x06,0x00,0x80,0x20,0x0E,0x00,0x80,0x0E,0x08,0x00,0x00,0x01,0x10,0x00,0x00,0x7E,0x10,0x00,0x00,0xA8,0x20,0x00,0x00,0x48,0x21,0x00,0x00,0xA8,0x42,0x00,0x00,0x48,0x55,0x00,0x00,0xA8,0x96,0x00,0x00,0x48,0x95,0x00,0x00,0xA4,0x96,0x00,0x00,0x54,0x55,0x00,0x00,0xCC,0x36,0x00,0x00,0x40,0x25,0x00,0x00,0x80,0x16,0x00,0x00,0x80,0x15,0x00,0x00,0x80,0x12,0x00,0x00,0x80,0x11,0x00,0x00,0x80,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x0A,0x00,0x00,0x40,0x0A,0x00,0x00,0x80,0x0A,0x00,0x00,0x80,0x0D,0x00,0x00,0x00,0x09,0x00,};
-const uint8_t _A_MDWL_32x32_1[] = {0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x80,0x0F,0x06,0x00,0x80,0x20,0x0E,0x00,0x80,0x0E,0x08,0x00,0x00,0x01,0x10,0x00,0x00,0x7E,0x10,0x00,0x00,0xA8,0x20,0x00,0x00,0x48,0x21,0x00,0x00,0x88,0x42,0x00,0x00,0x50,0x55,0x00,0x00,0x90,0x96,0x00,0x00,0x50,0x95,0x00,0x00,0x88,0x96,0x00,0x00,0x68,0x55,0x00,0x00,0xD8,0x36,0x00,0x00,0x40,0x25,0x00,0x00,0x80,0x16,0x00,0x00,0x80,0x15,0x00,0x00,0x80,0x12,0x00,0x00,0x80,0x11,0x00,0x00,0x80,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x20,0x04,0x00,0x00,0x20,0x04,0x00,0x00,0x10,0x09,0x00,0x00,0xD0,0x08,0x00,0x00,0x38,0x0B,0x00,0x00,0x08,0x1C,0x00,0x00,0x04,0x10,0x00,};
-const uint8_t _A_MDWL_32x32_2[] = {0x00,0xF0,0x01,0x00,0x80,0x0F,0x02,0x00,0x80,0x20,0x06,0x00,0x80,0x0E,0x0C,0x00,0x00,0x01,0x08,0x00,0x00,0x7E,0x10,0x00,0x00,0xE8,0x10,0x00,0x00,0xA8,0x20,0x00,0x00,0x44,0x21,0x00,0x00,0xA4,0x42,0x00,0x00,0x54,0x55,0x00,0x00,0xA2,0x96,0x00,0x00,0x52,0xA5,0x00,0x00,0xAA,0xA6,0x00,0x00,0x46,0xA5,0x00,0x00,0xC2,0x66,0x00,0x00,0x40,0x25,0x00,0x00,0x80,0x16,0x00,0x00,0x80,0x15,0x00,0x00,0x80,0x12,0x00,0x00,0x80,0x11,0x00,0x00,0x80,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x20,0x05,0x00,0x00,0xA0,0x06,0x00,0x00,0xA0,0x06,0x00,0x00,0x60,0x04,0x00,};
-const uint8_t *_A_MDWL_32x32[] = {_A_MDWL_32x32_0,_A_MDWL_32x32_1,_A_MDWL_32x32_2};
-
-const uint8_t _A_MDWRB_32x32_0[] = {0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0xE0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF8,0xFF,0x00,0x00,0xF8,0x7F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFE,0x1F,0x00,0x00,0xFE,0x1F,0x00,0x00,0xFF,0x1F,0x00,0x00,0xFF,0x1F,0x00,0x00,0xFF,0x3F,0x00,0x00,0xFE,0x3B,0x00,0x00,0xFC,0x33,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF0,0x01,0x00,0x00,0xF0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xF0,0x03,0x00,0x00,0xF0,0x03,0x00,0x00,0xF0,0x01,0x00,0x00,0xB0,0x01,0x00,0x00,0x90,0x00,0x00,};
-const uint8_t _A_MDWRB_32x32_1[] = {0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0xE0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF8,0xFF,0x00,0x00,0xF8,0x7F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFE,0x1F,0x00,0x00,0xFE,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x1F,0x00,0x00,0xFE,0x1F,0x00,0x00,0xFC,0x1B,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF0,0x01,0x00,0x00,0xF0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x07,0x00,0x00,0xE0,0x07,0x00,0x00,0xF0,0x0F,0x00,0x00,0xF0,0x0F,0x00,0x00,0xF0,0x1C,0x00,0x00,0x38,0x10,0x00,0x00,0x08,0x20,0x00,};
-const uint8_t _A_MDWRB_32x32_2[] = {0x00,0x80,0x0F,0x00,0x00,0xC0,0xFF,0x01,0x00,0xE0,0xFF,0x01,0x00,0xF0,0xFF,0x01,0x00,0xF0,0xFF,0x00,0x00,0xF8,0x7F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x3F,0x00,0x00,0xFE,0x3F,0x00,0x00,0xFE,0x3F,0x00,0x00,0xFF,0x7F,0x00,0x00,0xFF,0x7F,0x00,0x00,0xFF,0x77,0x00,0x00,0xFF,0x63,0x00,0x00,0xFE,0x43,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xF0,0x01,0x00,0x00,0xF0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x03,0x00,0x00,0xE0,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x60,0x07,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t *_A_MDWRB_32x32[] = {_A_MDWRB_32x32_0,_A_MDWRB_32x32_1,_A_MDWRB_32x32_2};
-
-const uint8_t _A_MDWR_32x32_0[] = {0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x60,0xF0,0x01,0x00,0x70,0x04,0x01,0x00,0x10,0x70,0x01,0x00,0x08,0x80,0x00,0x00,0x08,0x7E,0x00,0x00,0x04,0x15,0x00,0x00,0x84,0x12,0x00,0x00,0x42,0x15,0x00,0x00,0xAA,0x12,0x00,0x00,0x69,0x15,0x00,0x00,0xA9,0x12,0x00,0x00,0x69,0x25,0x00,0x00,0xAA,0x2A,0x00,0x00,0x6C,0x33,0x00,0x00,0xA4,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xA8,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x50,0x01,0x00,0x00,0xB0,0x01,0x00,0x00,0x90,0x00,0x00,};
-const uint8_t _A_MDWR_32x32_1[] = {0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x60,0xF0,0x01,0x00,0x70,0x04,0x01,0x00,0x10,0x70,0x01,0x00,0x08,0x80,0x00,0x00,0x08,0x7E,0x00,0x00,0x04,0x15,0x00,0x00,0x84,0x12,0x00,0x00,0x42,0x11,0x00,0x00,0xAA,0x0A,0x00,0x00,0x69,0x09,0x00,0x00,0xA9,0x0A,0x00,0x00,0x69,0x11,0x00,0x00,0xAA,0x16,0x00,0x00,0x6C,0x1B,0x00,0x00,0xA4,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xA8,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x04,0x00,0x00,0x20,0x04,0x00,0x00,0x90,0x08,0x00,0x00,0x10,0x0B,0x00,0x00,0xD0,0x1C,0x00,0x00,0x38,0x10,0x00,0x00,0x08,0x20,0x00,};
-const uint8_t _A_MDWR_32x32_2[] = {0x00,0x80,0x0F,0x00,0x00,0x40,0xF0,0x01,0x00,0x60,0x04,0x01,0x00,0x30,0x70,0x01,0x00,0x10,0x80,0x00,0x00,0x08,0x7E,0x00,0x00,0x08,0x17,0x00,0x00,0x04,0x15,0x00,0x00,0x84,0x22,0x00,0x00,0x42,0x25,0x00,0x00,0xAA,0x2A,0x00,0x00,0x69,0x45,0x00,0x00,0xA5,0x4A,0x00,0x00,0x65,0x55,0x00,0x00,0xA5,0x62,0x00,0x00,0x66,0x43,0x00,0x00,0xA4,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xA8,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xA0,0x04,0x00,0x00,0x60,0x05,0x00,0x00,0x60,0x05,0x00,0x00,0x20,0x06,0x00,};
-const uint8_t *_A_MDWR_32x32[] = {_A_MDWR_32x32_0,_A_MDWR_32x32_1,_A_MDWR_32x32_2};
-
const uint8_t _A_WatchingTV_128x64_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x40,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x11,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x60,0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x11,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x09,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x20,0x06,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x20,0x06,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0x20,0x0A,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x20,0x11,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x40,0x00,0xA0,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x50,0x40,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x01,0x30,0x80,0x7F,0xE0,0x00,0x00,0x80,0x03,0x80,0x0F,0x20,0x00,0x00,0x00,0x00,0x02,0x10,0x00,0x80,0x9F,0x00,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x18,0x00,0x00,0x80,0x00,0x00,0x80,0x03,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x40,0x00,0x00,0x80,0x03,0xE0,0x3F,0x60,0x00,0x00,0x00,0x00,0x08,0x24,0x00,0x00,0x40,0x00,0x00,0xC0,0x01,0x20,0x67,0x40,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x47,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0xC0,0x53,0xC1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x03,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0x00,0xF0,0x00,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0xF8,0x0F,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD0,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xA8,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x78,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0x0C,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0x81,0x01,0x1E,0x60,0x00,0x06,0xD4,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0x20,0x00,0x03,0x00,0x10,0x00,0x03,0xA8,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x20,0x00,0x0F,0x00,0x2E,0x80,0x01,0x50,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x05,0x40,0x01,0xA8,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x02,0xA0,0x00,0x50,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x01,0xD0,0x00,0xE8,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0x40,0xAA,0x02,0x00,0xAA,0x00,0x18,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x00,0x00,0x00,0x55,0x00,0x04,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0x80,0x6A,0x00,0x02,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x40,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA0,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD0,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0x00,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x40,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x54,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0x80,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x0D,0x00,0x00,0x50,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0x2A,0x00,0x80,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,};
const uint8_t _A_WatchingTV_128x64_1[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xA0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0xE0,0x10,0x00,0x00,0x00,0x00,0x00,0xC0,0x55,0x75,0x00,0x00,0x00,0x00,0x02,0x00,0xA0,0x10,0x00,0x00,0x00,0x00,0x00,0xA0,0xAA,0xAA,0x00,0x00,0x00,0x00,0x04,0x00,0x50,0x09,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x50,0x01,0x00,0x00,0x00,0x08,0x00,0xB0,0x05,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0xA0,0x02,0x00,0x00,0x00,0x10,0x00,0x50,0x02,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x05,0x00,0x00,0x00,0x10,0x00,0xB0,0x07,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x0A,0x00,0x00,0x00,0x20,0x00,0x50,0x09,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1A,0x00,0x00,0x00,0x80,0x00,0x58,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x80,0x00,0x28,0xC0,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x01,0x38,0x00,0x00,0x83,0x03,0x00,0x80,0x03,0x80,0x0F,0x30,0x00,0x00,0x00,0x00,0x02,0x18,0x00,0x00,0xFC,0x02,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x18,0x00,0x00,0x00,0x02,0x00,0x80,0x03,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x00,0x01,0x00,0x80,0x03,0xE0,0xBF,0x60,0x00,0x00,0x00,0x00,0x08,0x24,0x00,0x00,0x80,0x00,0x00,0xC0,0x01,0xE0,0x67,0x51,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x40,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x47,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0xC0,0x53,0xD1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0xF0,0xFF,0x03,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD4,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xAA,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x7A,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0xAD,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0xD5,0x01,0x1E,0x60,0x80,0x56,0xD5,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0xA0,0xAA,0x03,0x00,0x50,0x40,0x83,0xAA,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x60,0x40,0x0F,0x00,0x2E,0xA0,0x01,0x55,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x15,0x50,0x01,0xAA,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x0A,0xA8,0x00,0x55,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x05,0xD5,0x00,0xEA,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0xC0,0xAA,0xAA,0x82,0xAA,0x00,0x1D,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x55,0x05,0x40,0x55,0x00,0x06,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0xA0,0x6A,0x00,0x03,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x50,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA8,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD5,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x50,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xAA,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x40,0x55,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0xA8,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x1D,0x00,0x40,0x55,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,};
const uint8_t _A_WatchingTV_128x64_2[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x18,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x14,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x02,0x00,0x1C,0x10,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x60,0x00,0x00,0x00,0x00,0x02,0x00,0x16,0x10,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x00,0x00,0x00,0x00,0x04,0x00,0x2A,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x36,0x04,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x62,0x02,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0xC6,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x0A,0x07,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x40,0x00,0x86,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x4A,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x24,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x01,0x3C,0xF0,0x3F,0x80,0x01,0x00,0x80,0x03,0x80,0x0F,0x20,0x00,0x00,0x00,0x00,0x02,0x18,0x00,0xC0,0x60,0x01,0x00,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x38,0x00,0x00,0x1F,0x01,0x00,0x80,0x03,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x14,0x00,0x00,0x80,0x00,0x00,0x80,0x03,0xE0,0x3F,0x60,0x00,0x00,0x00,0x00,0x08,0x14,0x00,0x00,0x40,0x00,0x00,0xC0,0x01,0x20,0x67,0x40,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x00,0x20,0x00,0x00,0x60,0x00,0x60,0xA7,0xA0,0x00,0x00,0x00,0x00,0xF8,0x27,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0xC0,0x53,0xC1,0x00,0x00,0x00,0x00,0x06,0x58,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x80,0xAF,0xA0,0x00,0x00,0x00,0x00,0x01,0x60,0x80,0xFF,0x01,0x00,0x00,0x06,0x00,0x00,0x50,0xD0,0x00,0x00,0x00,0x80,0x00,0x40,0x78,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x40,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD0,0x00,0x00,0xFF,0xFF,0x0F,0x80,0x04,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x03,0xA8,0x00,0x00,0x55,0x55,0xF5,0xFF,0xFF,0xFF,0x0F,0x00,0xAE,0x00,0x00,0x60,0x04,0xD4,0x0F,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x0E,0x80,0xD5,0x00,0x00,0x1C,0x00,0x78,0x35,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x0F,0xC0,0xAA,0xFF,0xE1,0x03,0x00,0x0C,0x6A,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xEA,0x0A,0x60,0x81,0x01,0x1E,0x60,0x00,0x06,0xD4,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x0D,0x20,0x00,0x03,0x00,0x10,0x00,0x03,0xA8,0x01,0xAA,0xAA,0xAA,0xAA,0xAA,0xAE,0x0A,0x20,0x00,0x0F,0x00,0x2E,0x80,0x01,0x50,0x03,0x55,0x55,0x55,0x55,0x55,0x57,0x3D,0x3E,0x80,0xF5,0xFF,0x05,0x40,0x01,0xA8,0x02,0xAA,0xAA,0xAA,0xAA,0xEA,0xAA,0xCA,0x21,0x80,0xAA,0xAA,0x02,0xA0,0x00,0x50,0x03,0xFF,0xFF,0xFF,0xFF,0x7F,0x55,0x0D,0x20,0x80,0x55,0x55,0x01,0xD0,0x00,0xE8,0x07,0x88,0x88,0x88,0x88,0xB8,0xAA,0x0A,0x20,0x40,0xAA,0x02,0x00,0xAA,0x00,0x18,0x18,0x55,0x55,0x55,0x55,0x57,0x55,0x0D,0x20,0x40,0x00,0x00,0x00,0x55,0x00,0x04,0x20,0x22,0x22,0x22,0xA2,0xB3,0xAA,0x0A,0x40,0x40,0x00,0x00,0x80,0x6A,0x00,0x02,0x20,0x55,0x55,0x55,0x75,0x55,0x55,0x0D,0x80,0x40,0x00,0x00,0x40,0x7D,0x00,0x01,0x40,0x88,0x88,0x88,0x98,0xB8,0xAA,0x0A,0x00,0x21,0x00,0x00,0xA0,0x47,0x80,0x00,0x40,0x55,0x55,0x55,0x57,0x55,0x55,0x0D,0x00,0x3E,0x00,0x00,0xD0,0x40,0x80,0x00,0x40,0xFF,0xFF,0xFF,0x23,0xB2,0xAA,0x0A,0x00,0x00,0x00,0x00,0x6A,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x40,0x35,0x40,0x40,0x00,0x80,0x01,0x00,0x80,0x88,0xB8,0xAA,0x0A,0x00,0x00,0x00,0xA0,0x1A,0x40,0x20,0x00,0x80,0x01,0x00,0x80,0x55,0x55,0x55,0x0D,0x00,0x00,0x00,0x54,0x15,0x40,0x20,0x00,0x80,0x31,0xFC,0x8F,0x22,0xB2,0xAA,0x0A,0x00,0x00,0x80,0xAA,0x0A,0x40,0x10,0x00,0x80,0x49,0x02,0x90,0x55,0x55,0x55,0x0D,0x00,0x00,0x50,0x55,0x0D,0x80,0x10,0x00,0x80,0x49,0x02,0x90,0x88,0xB8,0xAA,0x2A,0x00,0x80,0xAA,0xAA,0x0E,0x80,0x08,0x00,0x80,0x31,0x02,0x90,0x55,0x55,0x55,0x5D,0x55,0x55,0x55,0x55,0x01,0x00,0x07,0x00,0x80,0x01,0x02,0x90,0x22,0xB2,0xAA,0xF6,0xAA,0xEA,0xFF,0xFF,0x01,0x00,0x04,0x00,0x40,0x11,0xFC,0x8F,0x55,0x55,0x55,0x85,0xD7,0x1F,0x00,0x00,0x1E,0x00,0x04,0x00,0x40,0x29,0x00,0x80,0x88,0xB8,0xAA,0x06,0x6C,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x29,0x00,0x80,0x55,0x55,0x55,0x05,0x38,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x20,0x15,0x00,0x80,0x22,0xB2,0xAA,0x06,0x10,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x20,0x0B,0x00,0x80,0x55,0x55,0x55,0x05,0x10,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x10,};
@@ -98,15 +62,6 @@ const uint8_t *_I_ButtonRight_4x7[] = {_I_ButtonRight_4x7_0};
const uint8_t _I_ButtonCenter_7x7_0[] = {0x1C,0x22,0x5D,0x5D,0x5D,0x22,0x1C,};
const uint8_t *_I_ButtonCenter_7x7[] = {_I_ButtonCenter_7x7_0};
-const uint8_t _I_FX_SittingB_40x27_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0xFC,0x0F,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0xF8,0x0F,0x00,0x00,0xE0,0xFF,0x07,0x00,0x00,0xFF,0xFF,0x03,0x00,0xE0,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x7F,0x07,0xFC,0x7F,0x00,0x00,0x06,0xF8,0x07,0x00,0x00,0x04,0xE0,0x03,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,};
-const uint8_t *_I_FX_SittingB_40x27[] = {_I_FX_SittingB_40x27_0};
-
-const uint8_t _I_BigGames_24x24_0[] = {0x00,0x3E,0x00,0x00,0x41,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x41,0x00,0x00,0x3E,0x00,0x00,0x14,0x00,0x00,0x14,0x00,0x00,0x14,0x00,0xF8,0xF7,0x1F,0x08,0x14,0x10,0x84,0xF7,0x20,0xC4,0xF7,0x21,0xC2,0xFF,0x41,0x02,0x7F,0x40,0x01,0x00,0x80,0xFF,0xFF,0xFF,0x55,0x55,0xD5,0xAB,0xAA,0xAA,0x55,0x55,0xD5,0xFF,0xFF,0xFF,};
-const uint8_t *_I_BigGames_24x24[] = {_I_BigGames_24x24_0};
-
-const uint8_t _I_BigProfile_24x24_0[] = {0x00,0x18,0x00,0x00,0x24,0x00,0x00,0x42,0x00,0x00,0x5A,0x00,0x00,0x5A,0x00,0x00,0x42,0x00,0x00,0x42,0x00,0xFE,0xFF,0x7F,0x01,0x00,0x80,0xF1,0x00,0x80,0xF9,0xF1,0xBF,0xF9,0x01,0x80,0xF9,0xF1,0xBF,0xF9,0x01,0x80,0xF1,0xB0,0x83,0x61,0x00,0x80,0x61,0xF0,0xBC,0xF1,0x00,0x80,0x09,0x01,0x80,0x05,0xF2,0xBB,0xFD,0x03,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0xFE,0xFF,0x7F,};
-const uint8_t *_I_BigProfile_24x24[] = {_I_BigProfile_24x24_0};
-
const uint8_t _I_DolphinOkay_41x43_0[] = {0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x1E,0xE0,0x00,0x00,0x00,0x80,0x01,0x00,0x07,0x00,0x00,0x60,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x08,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x80,0x00,0x00,0x04,0x00,0x00,0x80,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x3E,0x00,0x00,0x80,0x00,0x00,0x7D,0x00,0x00,0x80,0x00,0x80,0xFE,0x00,0x00,0x80,0x00,0x40,0xE2,0x01,0x00,0x80,0x00,0x40,0xF2,0x01,0x00,0x80,0x00,0x40,0xFE,0x01,0x00,0x80,0x00,0x40,0xFE,0x05,0x00,0x80,0x00,0x40,0x7C,0x0B,0x00,0x80,0x00,0x80,0x80,0x15,0x00,0x80,0x00,0x00,0xFD,0x0A,0x00,0x00,0x01,0x00,0x02,0x15,0x00,0x00,0x01,0x00,0x01,0x0A,0x00,0x00,0xE1,0x07,0x00,0x06,0x00,0x80,0x1F,0x00,0x00,0x02,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x20,0x00,0x00,0x08,0x00,0x00,0x20,0x00,0x00,0x04,0x00,0x00,0x10,0x00,0x00,0x02,0x00,0x00,0x08,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x80,0x03,0x00,0x00,0x01,0x00,0x70,0x00,0x00,0x00,0xF9,0x03,0x0F,0x00,0x00,0x00,0x06,0xFC,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xC0,0x01,0x00,0x08,0x00,0x00,0x78,0x00,0x00,0x30,0x00,0xF8,0xAF,0x00,0x00,0xC0,0xFF,0xFF,0x57,0x00,0x00,0x00,0xF8,0xBF,0x2A,0x00,0x00,0x00,0xF8,0x57,0x15,0x00,0x00,0x00,0xF8,0xAB,0x02,0x00,0x00,};
const uint8_t *_I_DolphinOkay_41x43[] = {_I_DolphinOkay_41x43_0};
@@ -137,54 +92,9 @@ const uint8_t *_I_DolphinFirstStart7_61x51[] = {_I_DolphinFirstStart7_61x51_0};
const uint8_t _I_Flipper_young_80x60_0[] = {0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x83,0x21,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x06,0xC3,0xD8,0x01,0x00,0x00,0x00,0x00,0xE0,0x3B,0x0C,0x86,0x31,0x07,0x00,0x00,0x00,0x00,0xC0,0x21,0x10,0x0C,0x21,0x0C,0x00,0x00,0x00,0x00,0x00,0xE7,0x60,0x18,0x62,0x14,0x00,0x00,0x00,0x00,0x00,0x8C,0xC1,0x10,0x46,0x24,0x00,0x00,0x00,0x00,0x00,0x18,0xC7,0x3F,0xC4,0x4C,0x00,0x00,0x00,0x00,0x00,0x10,0xFE,0xF3,0x87,0xC8,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x9C,0x50,0x01,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xE0,0xD0,0x02,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x80,0x93,0x02,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x9C,0x04,0x00,0x00,0x00,0xC0,0x01,0x00,0x00,0x00,0x98,0x05,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x20,0x0D,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x40,0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x15,0x00,0xF0,0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x35,0x00,0x1E,0x38,0x0C,0x00,0x00,0x00,0x00,0x00,0x26,0x00,0x03,0xE0,0x04,0x00,0x00,0x00,0x00,0x00,0x24,0x80,0x01,0x80,0x07,0x00,0x00,0xF0,0xFF,0x01,0x5C,0x80,0x0F,0x00,0x04,0x00,0x00,0x18,0x00,0x03,0x48,0x80,0x1F,0x00,0x08,0x00,0x00,0xCC,0x7F,0x06,0x50,0x00,0x7F,0x00,0x30,0x00,0x00,0x26,0x80,0x0C,0x60,0x00,0xFE,0x01,0x40,0x00,0x00,0x13,0x00,0x09,0x40,0x00,0xFC,0x07,0x80,0x00,0x00,0x89,0x3F,0x12,0x80,0x00,0xF8,0x0F,0x00,0x03,0x80,0xC5,0x7F,0x14,0x00,0x00,0xF0,0x3F,0x00,0x0C,0x80,0xE4,0xFF,0x24,0x00,0x00,0xE0,0x7F,0x00,0x10,0x80,0xE2,0xFF,0x28,0x00,0x00,0xC0,0xFF,0x01,0x60,0x80,0xF2,0xE7,0x29,0x00,0x00,0x80,0xFF,0x03,0x80,0x81,0xF2,0xE7,0x29,0x00,0x00,0x00,0xFF,0x07,0x00,0x8E,0xF2,0xFF,0x29,0x00,0x00,0x00,0xFE,0x0F,0x00,0xB8,0xF2,0xFE,0x29,0x00,0x00,0x00,0xFC,0x1F,0x00,0xE0,0xF2,0xFC,0x29,0x00,0x00,0x00,0xF8,0x3F,0x00,0x00,0xFE,0xF9,0x69,0x01,0x00,0x00,0xF0,0x7F,0x00,0x00,0x82,0xFF,0xA4,0x02,0x00,0x00,0xE0,0xFF,0x00,0x00,0x00,0x7E,0x54,0x05,0x00,0x00,0xC0,0xFF,0x01,0x00,0x00,0x78,0xB2,0x0A,0xE0,0x01,0x80,0xFF,0x03,0x00,0x38,0x40,0x59,0x15,0x70,0xFE,0xFF,0xFF,0x0F,0x00,0xE0,0x80,0xA9,0x0A,0x90,0x00,0xF8,0x80,0x1F,0x00,0x80,0x01,0x57,0x15,0x10,0x03,0x0E,0x00,0x3F,0x00,0x00,0x03,0xAA,0x0A,0x10,0x9C,0x07,0x00,0x7C,0x00,0x00,0x02,0x54,0x15,0x20,0xF0,0x01,0x00,0xF8,0x01,0x06,0x06,0xA8,0x0A,0x20,0x00,0x0F,0x00,0xFC,0x0F,0x03,0x00,0x50,0x15,0x40,0x00,0xF8,0xFF,0xFF,0xFF,0x00,0x00,0xA0,0x0A,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x15,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x0A,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x05,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,};
const uint8_t *_I_Flipper_young_80x60[] = {_I_Flipper_young_80x60_0};
-const uint8_t _I_BigBurger_24x24_0[] = {0xE0,0xFF,0x07,0x18,0x00,0x18,0x04,0x41,0x20,0x02,0x08,0x42,0x12,0x00,0x48,0x81,0x20,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0xFE,0xFF,0x7F,0xFE,0xFF,0x77,0x31,0x18,0x8C,0x87,0xC3,0xE1,0x7C,0x3C,0x3E,0x04,0x00,0x20,0xFE,0xFF,0x7F,0x01,0x00,0x80,0xFF,0x1F,0xF8,0xAA,0x6A,0x6E,0x56,0xD5,0x55,0xFE,0xFF,0x7F,0x01,0x00,0x80,0x01,0x00,0x80,0x02,0x00,0x40,0xFC,0xFF,0x3F,};
-const uint8_t *_I_BigBurger_24x24[] = {_I_BigBurger_24x24_0};
-
-const uint8_t _I_FX_Bang_32x6_0[] = {0x02,0x83,0xC0,0xC0,0x06,0x86,0x61,0x60,0x0C,0x86,0x61,0x30,0x18,0x0C,0x31,0x18,0x30,0x08,0x10,0x0C,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_FX_Bang_32x6[] = {_I_FX_Bang_32x6_0};
-
const uint8_t _I_DolphinFirstStart3_57x48_0[] = {0x00,0x00,0x00,0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0xF8,0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x04,0xBC,0x00,0x00,0x00,0x10,0x00,0x00,0x02,0xC0,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x02,0x00,0x38,0x40,0x00,0x00,0x02,0x00,0x04,0x00,0x3E,0x40,0x00,0x00,0xF4,0x03,0x08,0x80,0x07,0x80,0x00,0x00,0x5C,0x0D,0x10,0xE0,0x01,0x80,0x00,0x00,0xA8,0x3A,0x20,0xE0,0x00,0x00,0x01,0x00,0x58,0x55,0x00,0xC0,0x01,0x00,0x01,0x00,0xB0,0xAA,0x00,0x80,0x07,0x00,0x01,0x00,0x60,0x55,0x01,0x00,0x1E,0x00,0x01,0x0E,0xC0,0xAA,0x02,0xE0,0x5C,0x00,0x01,0x11,0x80,0x55,0x05,0x00,0xA9,0x00,0x01,0x21,0x00,0xAB,0x0A,0x00,0x56,0x07,0x01,0x41,0x00,0x56,0x15,0x00,0xEC,0x08,0x01,0x81,0x00,0xBF,0x2A,0x00,0x34,0x08,0x01,0x01,0xF1,0xC0,0x57,0x00,0x0C,0x08,0x01,0x02,0x0A,0x00,0xBE,0x00,0x04,0x08,0x01,0x02,0x06,0x00,0x78,0x83,0x02,0x04,0x01,0x02,0x0C,0x00,0xF0,0x7F,0x01,0x04,0x01,0x02,0xF4,0x01,0xFE,0x81,0x00,0x04,0x01,0x04,0x08,0xFF,0x6B,0x40,0x00,0x02,0x01,0x04,0x88,0x55,0x1D,0x40,0x00,0x02,0x01,0x04,0x50,0xAA,0x06,0x20,0x00,0x02,0x01,0x04,0x30,0xD4,0x01,0x20,0x00,0x01,0x01,0x04,0x10,0x68,0x00,0x10,0x00,0x01,0x01,0x04,0x18,0x18,0x00,0x10,0x00,0x01,0x01,0x08,0x18,0x06,0x80,0x10,0x00,0x01,0x01,0x08,0xE8,0x01,0x60,0x08,0x80,0x00,0x01,0x08,0x08,0x00,0x18,0x08,0x80,0x00,0x00,0x08,0x10,0x00,0x06,0x08,0x80,0x00,0x00,0x08,0x60,0xE0,0x01,0x08,0x80,0x00,0x00,0x08,0x80,0x1F,0x00,0x08,0x80,0x00,0x00,0x08,0x80,0x04,0x00,0x04,0x00,0x01,0x00,0x08,0x80,0x04,0x00,0x04,0x00,0x01,0x00,0x10,0x00,0x03,0x00,0x04,0x00,0x01,0x00,0x10,0x00,0x03,0x00,0x04,0x00,0x01,0x00,0x10,0x00,0x01,0x00,0x04,0x00,0x02,0x00,0x10,0x00,0x01,0x00,0x04,0x00,0x02,0x00,0x10,0x80,0x00,0x00,0x04,0x00,0x02,0x00,0x10,0x80,0x00,0x00,0x04,0x00,0x06,0x00,};
const uint8_t *_I_DolphinFirstStart3_57x48[] = {_I_DolphinFirstStart3_57x48_0};
-const uint8_t _I_blackfish_25x17_0[] = {0x00,0x0E,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x80,0x01,0x80,0xFF,0xE0,0x01,0xE0,0xFF,0xF0,0x01,0xF0,0xFF,0xF3,0x01,0xF8,0xFF,0xFF,0x00,0xFC,0xFF,0xFF,0x00,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x01,0xFE,0xFF,0xFB,0x01,0xF8,0xFF,0xF1,0x01,0xE0,0x7F,0xC0,0x01,0x00,0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,};
-const uint8_t *_I_blackfish_25x17[] = {_I_blackfish_25x17_0};
-
-const uint8_t _I_blacklid_36x27_0[] = {0x00,0x80,0x1F,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0xFE,0xFF,0x07,0x00,0x80,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x7F,0x00,0xF0,0xFF,0xFF,0xFF,0x00,0xF8,0xFF,0xFF,0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0x03,0xFC,0xFF,0xFF,0xFF,0x03,0xFE,0xFF,0xFF,0xFF,0x07,0xFE,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0xFE,0xFF,0xFF,0xFF,0x07,0xFE,0xFF,0xFF,0xFF,0x07,0xFC,0xFF,0xFF,0xFF,0x03,0xF0,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0xFC,0xFF,0x03,0x00,};
-const uint8_t *_I_blacklid_36x27[] = {_I_blacklid_36x27_0};
-
-const uint8_t _I_skeleton_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x10,0x25,0xC0,0x00,0x08,0x49,0xA1,0x00,0x68,0x4A,0x92,0x00,0x64,0x4A,0x52,0x00,0x64,0xFE,0x5F,0x00,0x08,0x4A,0x92,0x00,0x08,0x4A,0xA1,0x00,0x10,0x29,0xC0,0x00,0xE0,0x04,0x00,0x00,};
-const uint8_t *_I_skeleton_25x17[] = {_I_skeleton_25x17_0};
-
-const uint8_t _I_letterB_10x10_0[] = {0xFF,0x03,0x01,0x02,0x39,0x02,0x49,0x02,0x39,0x02,0x49,0x02,0x49,0x02,0x39,0x02,0x01,0x02,0xFF,0x03,};
-const uint8_t *_I_letterB_10x10[] = {_I_letterB_10x10_0};
-
-const uint8_t _I_shit_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x0F,0x01,0x00,0x80,0x00,0x07,0x00,0x80,0xC0,0x08,0x00,0xC0,0x03,0x08,0x00,0x20,0x06,0x1E,0x00,0x20,0x30,0x13,0x00,0x20,0x00,0x10,0x00,0xC0,0x00,0x18,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_shit_25x17[] = {_I_shit_25x17_0};
-
-const uint8_t _I_letterC_10x10_0[] = {0xFF,0x03,0x01,0x02,0x31,0x02,0x49,0x02,0x09,0x02,0x09,0x02,0x49,0x02,0x31,0x02,0x01,0x02,0xFF,0x03,};
-const uint8_t *_I_letterC_10x10[] = {_I_letterC_10x10_0};
-
-const uint8_t _I_active_plate_48x18_0[] = {0x08,0x00,0x00,0x00,0x00,0x10,0x0C,0x00,0x00,0x00,0x00,0x30,0x06,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,0x00,0x60,0x07,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0x00,0x00,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0xF8,0x3E,0x00,0x00,0x00,0x00,0x7C,0x7E,0x00,0x00,0x00,0x00,0x7E,0xFC,0x01,0x00,0x00,0x80,0x3F,0xF8,0x0F,0x00,0x00,0xF0,0x1F,0xF0,0x7F,0x00,0x00,0xFE,0x0F,0xE0,0xFF,0xFF,0xFF,0xFF,0x07,0x80,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFE,0xFF,0xFF,0x7F,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,};
-const uint8_t *_I_active_plate_48x18[] = {_I_active_plate_48x18_0};
-
-const uint8_t _I_fish_25x17_0[] = {0x00,0x0E,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x21,0x80,0x01,0x80,0xCD,0x60,0x01,0x60,0xC0,0x10,0x01,0x10,0x00,0x13,0x01,0x08,0x00,0x8C,0x00,0xC4,0x00,0x88,0x00,0xE3,0x00,0x40,0x00,0xE1,0x00,0x80,0x00,0x03,0x00,0x80,0x00,0x01,0x00,0x0C,0x01,0x0E,0x00,0x1B,0x01,0x38,0xC0,0x71,0x01,0xE0,0x7F,0xC0,0x01,0x00,0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,};
-const uint8_t *_I_fish_25x17[] = {_I_fish_25x17_0};
-
-const uint8_t _I_blackshit_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xF0,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xFF,0x01,0x00,0x80,0xFF,0x07,0x00,0x80,0xFF,0x0F,0x00,0xC0,0xFF,0x0F,0x00,0xE0,0xFF,0x1F,0x00,0xE0,0xFF,0x1F,0x00,0xE0,0xFF,0x1F,0x00,0xC0,0xFF,0x1F,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_blackshit_25x17[] = {_I_blackshit_25x17_0};
-
-const uint8_t _I_lid_36x27_0[] = {0x00,0x80,0x1F,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0x38,0xCF,0x01,0x00,0x00,0x06,0x00,0x06,0x00,0x80,0x01,0x00,0x18,0x00,0x40,0x00,0x80,0x21,0x00,0x20,0x00,0x00,0x46,0x00,0x10,0x00,0x00,0x8C,0x00,0x08,0x00,0x00,0x18,0x01,0x04,0x00,0x00,0x38,0x02,0x04,0x00,0x00,0x70,0x02,0x02,0x00,0x00,0x70,0x04,0x02,0x00,0x00,0xE0,0x04,0x01,0x00,0x00,0xE0,0x08,0x01,0x00,0x00,0xC0,0x09,0x01,0x00,0x00,0xC0,0x09,0x01,0x00,0x00,0xC0,0x09,0x02,0x00,0x00,0xC0,0x07,0x02,0x00,0x00,0xC0,0x07,0x0C,0x00,0x00,0xE0,0x03,0x30,0x00,0x00,0xF0,0x00,0xC0,0x03,0x00,0x3C,0x00,0x00,0xFC,0xFF,0x03,0x00,};
-const uint8_t *_I_lid_36x27[] = {_I_lid_36x27_0};
-
-const uint8_t _I_blackskeleton_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xF0,0x25,0xC0,0x00,0xF8,0x49,0xE1,0x00,0xF8,0x4B,0xF2,0x00,0xFC,0x4B,0x72,0x00,0xFC,0xFF,0x7F,0x00,0xF8,0x4B,0xF2,0x00,0xF8,0x4B,0xE1,0x00,0xF0,0x29,0xC0,0x00,0xE0,0x04,0x00,0x00,};
-const uint8_t *_I_blackskeleton_25x17[] = {_I_blackskeleton_25x17_0};
-
-const uint8_t _I_letterA_10x10_0[] = {0xFF,0x03,0x01,0x02,0x31,0x02,0x49,0x02,0x79,0x02,0x49,0x02,0x49,0x02,0x49,0x02,0x01,0x02,0xFF,0x03,};
-const uint8_t *_I_letterA_10x10[] = {_I_letterA_10x10_0};
-
-const uint8_t _I_plate_42x19_0[] = {0x00,0xF0,0xFF,0x3F,0x00,0x00,0x00,0x0E,0x00,0xC0,0x01,0x00,0xC0,0x01,0x00,0x00,0x0E,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x08,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x80,0x00,0x08,0x00,0x00,0x00,0x40,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0xC0,0x01,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0xC0,0x01,0x00,0x00,0xF0,0xFF,0x3F,0x00,0x00,};
-const uint8_t *_I_plate_42x19[] = {_I_plate_42x19_0};
-
const uint8_t _I_PassportBottom_128x17_0[] = {0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x9A,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x9A,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x9A,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0xF9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0D,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x05,0xF2,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x05,0xFA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x09,0x79,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xD5,0x80,0x55,0xD5,0x00,0xF3,0xCC,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x6A,0x00,0xAB,0x6A,0x00,0x06,0x86,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xFE,0x3F,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
const uint8_t *_I_PassportBottom_128x17[] = {_I_PassportBottom_128x17_0};
@@ -417,33 +327,6 @@ const uint8_t *_I_Medium_chip_22x21[] = {_I_Medium_chip_22x21_0};
const uint8_t _I_EMV_Chip_14x11_0[] = {0xFC,0x0F,0x02,0x10,0xC9,0x24,0x2F,0x3C,0x11,0x22,0x11,0x22,0x11,0x22,0x2F,0x3D,0xC9,0x24,0x02,0x10,0xFC,0x0F,};
const uint8_t *_I_EMV_Chip_14x11[] = {_I_EMV_Chip_14x11_0};
-const uint8_t _I_passport_happy1_43x45_0[] = {0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x80,0x00,0x00,0x03,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x20,0x00,0x00,0x08,0x70,0x00,0x10,0x00,0x00,0x10,0x8E,0x01,0x08,0x00,0x00,0xA0,0x01,0x02,0x08,0x00,0x00,0x60,0x00,0x02,0x04,0x00,0x00,0x30,0xC0,0x03,0x04,0x00,0x00,0x0C,0x10,0x02,0x02,0x70,0x00,0x06,0x0C,0x01,0x02,0xFC,0x01,0x01,0x02,0x01,0x02,0xFE,0x01,0x80,0x80,0x00,0x01,0xFF,0x03,0x40,0x40,0x00,0x01,0x2F,0x00,0x60,0x60,0x00,0x81,0x17,0x00,0xB0,0x20,0x00,0x41,0x0F,0x00,0x58,0x11,0x00,0x81,0x0A,0x00,0xAC,0x08,0x00,0x41,0x0D,0x00,0x56,0x05,0x00,0x81,0x8A,0x00,0xBF,0x06,0x00,0x40,0x85,0x80,0xFF,0x07,0x00,0x80,0x02,0xE3,0xC3,0x1F,0x00,0x00,0x00,0xFC,0x01,0x7F,0x00,0x00,0x00,0xF0,0x03,0xFC,0x03,0x00,0x00,0x80,0x3F,0xF0,0x07,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x8E,0x03,0x00,0x00,0x04,0x00,0xD3,0x04,0x00,0x00,0x07,0x80,0x71,0x04,0x00,0xF0,0x01,0x80,0x61,0x44,0xFD,0x1F,0x00,0x80,0x61,0x88,0xAA,0x02,0x00,0x80,0x61,0x08,0x54,0x01,0x00,0xC0,0xC0,0x10,0xA8,0x01,0x00,0xC0,0xC0,0x10,0x40,0x01,0x00,0xC0,0xC0,0x20,0x00,0x02,0x00,0x60,0xC0,0x20,0x00,0x02,0x00,0x60,0xC0,0x40,0x00,0x02,0x00,0x30,0xC0,0x80,0x00,0x02,0x00,0x38,0xC0,0x80,0x00,0x04,0x00,0x1C,0xC0,0x00,0x01,0x04,0x00,0x0E,0xC0,0x00,0x02,0x08,0x00,0x06,0xE0,0x01,0x0C,0x08,0x00,0x03,0xE0,0x01,0x70,0x10,0x00,0x01,0xF0,0x03,0x80,0x33,0x00,};
-const uint8_t *_I_passport_happy1_43x45[] = {_I_passport_happy1_43x45_0};
-
-const uint8_t _I_passport_bad3_43x45_0[] = {0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x30,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x07,0x00,0x00,0x00,0x02,0xC0,0x18,0x00,0x00,0x00,0x01,0x20,0x20,0x00,0x00,0x80,0x01,0x10,0x40,0x00,0x00,0x40,0x01,0x08,0x80,0x00,0x00,0x20,0x01,0x08,0x80,0x00,0x00,0x10,0x01,0x08,0x00,0x01,0x00,0x10,0x01,0x04,0x50,0x01,0x00,0x08,0x02,0x04,0xAA,0x06,0x00,0x08,0xE2,0x07,0xD5,0x0F,0x00,0x04,0x14,0x88,0x3A,0x12,0x00,0x04,0xEC,0x50,0x07,0x12,0x00,0x04,0xF6,0xA1,0x04,0x14,0x00,0x02,0x8C,0x63,0x08,0x14,0x00,0x02,0x8E,0x26,0x08,0x14,0x00,0x02,0x8D,0x2B,0x08,0x14,0x00,0x02,0x4E,0x2C,0x04,0x14,0x00,0x02,0x35,0x28,0x04,0x12,0x00,0x02,0xFA,0x17,0x04,0x12,0x00,0x02,0x84,0xF9,0xFF,0x0F,0x00,0x02,0x02,0x07,0x04,0x08,0x00,0x02,0x00,0x00,0x08,0x10,0x00,0x02,0x00,0x00,0x10,0x20,0x00,0x03,0x00,0x00,0x20,0x40,0x00,0x02,0x00,0x00,0x40,0x80,0x00,0x0C,0xC0,0x01,0x80,0x00,0x01,0x30,0x20,0x06,0x00,0x01,0x02,0xC0,0x20,0x18,0x00,0x01,0x02,0x00,0x01,0x60,0x00,0x02,0x04,0x00,0x02,0x80,0x01,0x02,0x04,0x80,0x02,0x0F,0x06,0x04,0x04,0x00,0x02,0x3A,0x38,0xFC,0x07,0x01,0x02,0xD4,0xC0,0x07,0x03,0x0E,0x02,0xA8,0x03,0x80,0x00,0x70,0x02,0x40,0x1D,0x40,0x00,0x80,0x03,0x80,0xEA,0x3F,0x00,0x00,0x0C,0x00,0x55,0x35,0x00,0x00,0x30,0x00,0xAA,0x2A,0x00,0x00,0xC0,0x00,0x54,0x35,0x00,0x00,0x00,0x01,0xA0,0x6A,0x00,0x00,0x40,0x01,0x00,0x45,0x00,0x00,0x00,0x01,0x00,0x40,0x00,0x00,0x00,0x01,0x00,0x40,0x00,};
-const uint8_t *_I_passport_bad3_43x45[] = {_I_passport_bad3_43x45_0};
-
-const uint8_t _I_passport_okay2_43x45_0[] = {0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x9E,0xE3,0x00,0x00,0x00,0x80,0x61,0x00,0x07,0x00,0x00,0x60,0x10,0x00,0x18,0x00,0x00,0x10,0x08,0x00,0x20,0x00,0x00,0x08,0x04,0x00,0x40,0x00,0x00,0x04,0x04,0x00,0x80,0x00,0x00,0x04,0x02,0x00,0x80,0x00,0x00,0x02,0x03,0x00,0x00,0x01,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x01,0x03,0x00,0x00,0x02,0x80,0x80,0x05,0xFE,0x00,0x02,0x80,0x80,0x02,0x01,0x01,0x04,0x80,0x80,0x85,0x7C,0x02,0x04,0x80,0xFF,0x4A,0xFA,0x04,0x04,0x40,0x00,0x57,0xC5,0x04,0x00,0x40,0x01,0x78,0xE5,0x05,0x00,0x20,0x21,0x40,0xFD,0x15,0x00,0x20,0x21,0x40,0xFD,0x2D,0x00,0x20,0x21,0x40,0xF9,0x55,0x00,0x20,0x42,0x80,0x82,0x2C,0x00,0x20,0x42,0x80,0xFD,0x57,0x00,0x20,0x02,0x80,0x06,0x2A,0x00,0x40,0x00,0x78,0x02,0x14,0x00,0x40,0xE0,0x07,0x02,0x04,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x20,0x00,0x00,0x08,0x00,0x00,0x20,0x00,0x00,0x04,0x00,0x00,0x10,0x00,0x00,0x02,0x00,0x00,0x08,0x00,0x00,0x01,0x00,0x00,0x06,0x00,0x00,0x01,0x00,0x80,0x01,0x00,0x00,0x01,0x00,0x70,0x00,0x00,0x00,0xF9,0x00,0x0F,0x00,0x00,0x00,0x06,0xFF,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0xC0,0x0B,0x00,0x08,0x00,0x00,0x78,0x05,0x00,0x30,0x00,0xF8,0xAF,0x02,0x00,0xC0,0xFF,0xFF,0x57,0x01,0x00,0x00,0xF8,0xBF,0x2A,0x00,0x00,0x00,0xF8,0x57,0x15,0x00,0x00,0x00,0xF8,0xAB,0x02,0x00,0x00,0x00,0xF8,0x55,0x01,0x00,0x00,0x00,0xF8,0xAA,0x00,0x00,0x00,};
-const uint8_t *_I_passport_okay2_43x45[] = {_I_passport_okay2_43x45_0};
-
-const uint8_t _I_passport_bad2_43x45_0[] = {0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x70,0x00,0x06,0x00,0x00,0x00,0xFC,0x07,0x18,0x00,0x00,0x00,0x02,0x1D,0x60,0x00,0x00,0x00,0x01,0x2A,0x80,0x00,0x00,0x80,0x00,0x50,0x00,0x01,0x00,0x40,0x00,0xA0,0x00,0x02,0x00,0x20,0x00,0xC0,0x00,0x04,0x00,0x10,0x00,0xA0,0x01,0x04,0x00,0x10,0x00,0x40,0x01,0x08,0x00,0x08,0xE0,0x81,0x02,0x08,0x00,0x08,0x18,0x06,0xE3,0x0F,0x00,0x04,0x04,0x88,0x1A,0x08,0x00,0x04,0x62,0x10,0x07,0x10,0x00,0x04,0xD2,0x91,0x41,0x14,0x00,0x02,0xCA,0x93,0x40,0x14,0x00,0x02,0xCA,0x66,0x44,0x14,0x00,0x02,0xCB,0x2F,0x44,0x14,0x00,0x82,0x8A,0x2F,0x44,0x14,0x00,0x02,0x15,0x14,0x04,0x10,0x00,0x82,0xFA,0x13,0x00,0x10,0x00,0x02,0x05,0x39,0xFC,0x0F,0x00,0x01,0x02,0xC6,0x03,0x08,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x01,0xC0,0x01,0x00,0x00,0x01,0x01,0x20,0x06,0x00,0x00,0x01,0x01,0x00,0x18,0x00,0x00,0x02,0x01,0x00,0x60,0x00,0x00,0x02,0x00,0x00,0x80,0x01,0x00,0x04,0x00,0x00,0x0F,0x06,0x00,0x04,0x00,0x00,0x3A,0x38,0xF8,0x07,0x00,0x00,0xD4,0xC0,0x07,0x02,0x00,0x00,0xA8,0x03,0x00,0x02,0x00,0x00,0x40,0x1D,0x80,0x01,0x00,0x00,0x80,0xEA,0x7F,0x00,0x00,0x00,0x00,0x55,0x0D,0x00,0x00,0x00,0x00,0xAA,0x0A,0x00,0x00,0x00,0x00,0x54,0x0D,0x00,0x00,0x00,0x00,0xA0,0x0A,0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,};
-const uint8_t *_I_passport_bad2_43x45[] = {_I_passport_bad2_43x45_0};
-
-const uint8_t _I_passport_okay3_43x45_0[] = {0x00,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0x28,0xE0,0x00,0x00,0x00,0x00,0x5E,0x00,0x07,0x00,0x00,0x80,0xA1,0x00,0x1A,0x00,0x00,0x60,0x40,0x01,0x26,0x00,0x00,0x10,0x80,0x02,0x4A,0x00,0x00,0x08,0x80,0x02,0x85,0x00,0x00,0x04,0x00,0x01,0x83,0x00,0x00,0x02,0x00,0x01,0x05,0x01,0x00,0x02,0x00,0x02,0x03,0x01,0x00,0x01,0x00,0x82,0x01,0x02,0x00,0x01,0x00,0xFF,0x02,0x02,0x00,0xAB,0x80,0x80,0x01,0x04,0x00,0x55,0x41,0x3E,0x01,0x04,0x80,0xFF,0x22,0x41,0x02,0x04,0x40,0x40,0xA7,0xA2,0x02,0x02,0x40,0x40,0xB8,0x9C,0x06,0x02,0x20,0x20,0xA0,0x94,0x0A,0x02,0x20,0x20,0xA0,0x9C,0x06,0x01,0x20,0x20,0xA0,0xA2,0x0B,0x01,0x20,0x20,0xE0,0xC1,0x17,0x01,0x20,0x20,0xC0,0xFF,0x8B,0x00,0x20,0x40,0x80,0x03,0x95,0x00,0x40,0x40,0x78,0x01,0x4A,0x00,0x40,0xE0,0x1F,0x01,0x46,0x00,0x80,0x1F,0x05,0x00,0x40,0x00,0xC0,0xC0,0x02,0x20,0x80,0x00,0x30,0xB0,0x01,0x20,0x00,0x07,0x08,0x68,0x00,0x10,0x00,0x00,0x04,0x14,0x00,0x10,0x00,0x00,0x02,0x14,0x00,0x08,0x00,0x04,0x01,0x0A,0x00,0x04,0x00,0x02,0x01,0x0A,0x80,0x03,0x00,0x01,0x01,0x0A,0x70,0x00,0x00,0x01,0xF9,0x0A,0x0F,0x00,0x80,0x00,0x06,0xFF,0x00,0x00,0x86,0x00,0x04,0x00,0x00,0xC0,0x4B,0x00,0x08,0x00,0x00,0x78,0xA5,0x00,0x30,0x00,0xF8,0xAF,0x22,0x01,0xC0,0xFF,0xFF,0x57,0x41,0x02,0x00,0xF8,0xBF,0x2A,0x80,0x04,0x00,0xF8,0x57,0x15,0x00,0x01,0x00,0xF8,0xAB,0x02,0x00,0x02,0x00,0xF8,0x55,0x01,0x00,0x04,0x00,0xF8,0xAA,0x00,0x00,0x00,};
-const uint8_t *_I_passport_okay3_43x45[] = {_I_passport_okay3_43x45_0};
-
-const uint8_t _I_passport_bad1_43x45_0[] = {0x00,0xC0,0x7F,0x00,0x00,0x00,0x00,0x30,0x80,0x03,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x02,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x10,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x04,0x60,0x30,0x00,0x08,0x00,0x04,0xD0,0x01,0x00,0x08,0x00,0x02,0xC8,0x03,0x00,0x08,0x00,0x02,0xCA,0x06,0x00,0x08,0x00,0x02,0xCD,0x0F,0x40,0x0D,0x00,0x02,0x8A,0x0F,0xA0,0x0A,0x00,0x02,0x15,0x04,0x50,0x05,0x00,0x02,0xFA,0x03,0xA8,0x06,0x00,0x02,0x04,0x01,0xF4,0x07,0x00,0x01,0x02,0x02,0x08,0x08,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x01,0xC0,0x01,0x00,0x00,0x01,0x01,0x20,0x06,0x00,0x00,0x01,0x01,0x00,0x18,0x00,0x00,0x02,0x01,0x00,0x60,0x00,0x00,0x02,0x00,0x00,0x80,0x01,0x00,0x04,0x00,0x00,0x0F,0x06,0x00,0x04,0x00,0x00,0x3A,0x38,0xF8,0x07,0x00,0x00,0xD4,0xC0,0x07,0x02,0x00,0x00,0xA8,0x03,0x00,0x02,0x00,0x00,0x40,0x1D,0x80,0x01,0x00,0x00,0x80,0xEA,0x7F,0x00,0x00,0x00,0x00,0x55,0x0D,0x00,0x00,0x00,0x00,0xAA,0x0A,0x00,0x00,0x00,0x00,0x54,0x0D,0x00,0x00,0x00,0x00,0xA0,0x0A,0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,};
-const uint8_t *_I_passport_bad1_43x45[] = {_I_passport_bad1_43x45_0};
-
-const uint8_t _I_passport_happy3_43x45_0[] = {0x00,0xFE,0x3F,0x00,0x00,0x00,0x80,0x05,0xE8,0x00,0x00,0x00,0x40,0x02,0xD4,0x07,0x00,0x00,0x20,0x01,0x68,0x08,0x00,0x00,0x10,0x01,0x14,0x10,0x70,0x00,0x08,0x01,0x0A,0x20,0x8E,0x01,0x08,0x02,0x05,0xE0,0x01,0x02,0x04,0xFE,0x0A,0x60,0x00,0x02,0x04,0x01,0x13,0xF0,0xC1,0x03,0x84,0x7C,0x22,0x0C,0x12,0x02,0x46,0x82,0x42,0x02,0x0C,0x01,0x4A,0xF9,0x82,0x01,0x02,0x01,0x4E,0xFD,0x42,0x80,0x80,0x00,0x7B,0xCF,0x23,0x40,0x40,0x00,0x55,0x27,0x1C,0x60,0x60,0x00,0x6A,0x1A,0x00,0xB0,0x20,0x00,0xC1,0x0C,0x00,0x58,0x11,0x00,0x81,0x09,0x00,0xAC,0x08,0x00,0x40,0x0F,0x00,0x56,0x05,0x00,0x80,0x8A,0x00,0xBF,0x06,0x00,0x41,0x85,0x80,0xFF,0x07,0x00,0x82,0x02,0xE3,0xC3,0x1F,0x00,0x04,0x00,0xFC,0x01,0x7F,0x00,0x08,0x00,0xF0,0x03,0xFC,0x03,0x10,0x00,0x80,0x3F,0xF0,0x07,0x20,0x00,0x00,0xC0,0xFF,0x07,0x21,0x00,0x00,0x00,0x00,0x04,0x23,0x8E,0x03,0x00,0x00,0x04,0x16,0xD3,0x04,0x00,0x00,0x07,0x8C,0x71,0x04,0x00,0xF0,0x01,0x98,0x61,0x44,0xFD,0x1F,0x00,0xB0,0x61,0x88,0xAA,0x02,0x00,0xE0,0x61,0x08,0x54,0x01,0x00,0xC0,0xC0,0x10,0xA8,0x01,0x00,0xC0,0xC0,0x10,0x40,0x01,0x00,0xC0,0xC0,0x20,0x00,0x02,0x00,0x60,0xC0,0x20,0x00,0x02,0x00,0x60,0xC0,0x40,0x00,0x02,0x00,0x30,0xC0,0x80,0x00,0x02,0x00,0x38,0xC0,0x80,0x00,0x04,0x00,0x1C,0xC0,0x00,0x01,0x04,0x00,0x0E,0xC0,0x00,0x02,0x08,0x00,0x06,0xE0,0x01,0x0C,0x08,0x00,0x03,0xE0,0x01,0x70,0x10,0x00,0x01,0xF0,0x03,0x80,0x33,0x00,};
-const uint8_t *_I_passport_happy3_43x45[] = {_I_passport_happy3_43x45_0};
-
-const uint8_t _I_passport_happy2_43x45_0[] = {0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x80,0x00,0x80,0x0F,0x00,0x00,0x40,0x1F,0x60,0x10,0x00,0x00,0xE0,0xEA,0x10,0x24,0x70,0x00,0x10,0x54,0x49,0x68,0x8E,0x01,0x08,0xA0,0x86,0xE8,0x01,0x02,0x08,0x78,0x05,0x61,0x00,0x02,0x04,0xC6,0x12,0x31,0xC0,0x03,0x04,0x01,0x23,0x0C,0x10,0x02,0x82,0x70,0x22,0x06,0x0C,0x01,0x82,0xFC,0x02,0x01,0x02,0x01,0x42,0xFE,0xC2,0x80,0x80,0x00,0x41,0xFF,0x23,0x40,0x40,0x00,0x41,0x2F,0x1C,0x60,0x60,0x00,0x41,0x16,0x00,0xB0,0x20,0x00,0xC1,0x08,0x00,0x58,0x11,0x00,0x81,0x0F,0x00,0xAC,0x08,0x00,0x41,0x0D,0x00,0x56,0x05,0x00,0x81,0x8A,0x00,0xBF,0x06,0x00,0x40,0x85,0x80,0xFF,0x07,0x00,0x80,0x02,0xE3,0xC3,0x1F,0x00,0x00,0x00,0xFC,0x01,0x7F,0x00,0x00,0x00,0xF0,0x03,0xFC,0x03,0x00,0x00,0x80,0x3F,0xF0,0x07,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x8E,0x03,0x00,0x00,0x04,0x00,0xD3,0x04,0x00,0x00,0x07,0x80,0x71,0x04,0x00,0xF0,0x01,0x80,0x61,0x44,0xFD,0x1F,0x00,0x80,0x61,0x88,0xAA,0x02,0x00,0x80,0x61,0x08,0x54,0x01,0x00,0xC0,0xC0,0x10,0xA8,0x01,0x00,0xC0,0xC0,0x10,0x40,0x01,0x00,0xC0,0xC0,0x20,0x00,0x02,0x00,0x60,0xC0,0x20,0x00,0x02,0x00,0x60,0xC0,0x40,0x00,0x02,0x00,0x30,0xC0,0x80,0x00,0x02,0x00,0x38,0xC0,0x80,0x00,0x04,0x00,0x1C,0xC0,0x00,0x01,0x04,0x00,0x0E,0xC0,0x00,0x02,0x08,0x00,0x06,0xE0,0x01,0x0C,0x08,0x00,0x03,0xE0,0x01,0x70,0x10,0x00,0x01,0xF0,0x03,0x80,0x33,0x00,};
-const uint8_t *_I_passport_happy2_43x45[] = {_I_passport_happy2_43x45_0};
-
-const uint8_t _I_passport_okay1_43x45_0[] = {0x00,0x00,0xE0,0x3F,0x00,0x00,0x00,0x00,0x1C,0xC0,0x01,0x00,0x00,0x00,0x03,0x00,0x06,0x00,0x00,0xC0,0x00,0x00,0x18,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x40,0x00,0x00,0x08,0x00,0x00,0x80,0x00,0x00,0x04,0x00,0x00,0x80,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x7C,0x00,0x04,0x80,0x00,0x00,0xFA,0x00,0x04,0x80,0x00,0x00,0xFD,0x01,0x04,0x80,0x00,0x80,0xC4,0x03,0x00,0x80,0x00,0x80,0xE4,0x03,0x00,0x80,0x00,0x80,0xFC,0x03,0x00,0x80,0x00,0x80,0xFC,0x0B,0x00,0x80,0x00,0x80,0xF8,0x16,0x00,0x80,0x00,0x00,0x01,0x2B,0x00,0x80,0x00,0x00,0xFA,0x15,0x00,0x00,0x01,0x00,0x04,0x2A,0x00,0x00,0x01,0x00,0x02,0x14,0x00,0x00,0xE1,0x03,0x00,0x0C,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x20,0x00,0x00,0x18,0x00,0x00,0x20,0x00,0x00,0x04,0x00,0x00,0x10,0x00,0x00,0x02,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x80,0x03,0x00,0x00,0x01,0x00,0x70,0x00,0x00,0x00,0xF9,0x03,0x0F,0x00,0x00,0x00,0x06,0xFC,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xC0,0x01,0x00,0x08,0x00,0x00,0x78,0x00,0x00,0x30,0x00,0xF8,0xAF,0x00,0x00,0xC0,0xFF,0xFF,0x57,0x00,0x00,0x00,0xF8,0xBF,0x2A,0x00,0x00,0x00,0xF8,0x57,0x15,0x00,0x00,0x00,0xF8,0xAB,0x02,0x00,0x00,0x00,0xF8,0x55,0x01,0x00,0x00,0x00,0xF8,0xAA,0x00,0x00,0x00,};
-const uint8_t *_I_passport_okay1_43x45[] = {_I_passport_okay1_43x45_0};
-
const uint8_t _I_Health_16x16_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0x40,0x01,0x78,0x0F,0x08,0x08,0x78,0x0F,0x40,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
const uint8_t *_I_Health_16x16[] = {_I_Health_16x16_0};
@@ -489,285 +372,6 @@ const uint8_t *_I_SDQuestion_35x43[] = {_I_SDQuestion_35x43_0};
const uint8_t _I_SDError_43x35_0[] = {0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x04,0x3D,0x00,0x00,0x00,0x00,0x04,0x3D,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x04,0x3D,0x30,0x18,0x0C,0x06,0x04,0x3D,0x60,0x0C,0x18,0x03,0x04,0x01,0xC0,0x06,0xB0,0x01,0x04,0x3D,0x80,0x03,0xE0,0x00,0x04,0x3D,0x80,0x03,0xE0,0x00,0x04,0x01,0xC0,0x06,0xB0,0x01,0x04,0x3D,0x60,0x0C,0x18,0x03,0x04,0x3D,0x30,0x18,0x0C,0x06,0x04,0x01,0x00,0x00,0x00,0x00,0x04,0x3D,0x00,0x00,0x00,0x00,0x04,0x3D,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x04,0x3D,0x00,0xFC,0x3F,0x00,0x04,0x3D,0x00,0xFF,0xFF,0x00,0x04,0x01,0x80,0x1F,0xF9,0x01,0x04,0x3D,0xC0,0x2F,0xF2,0x03,0x04,0x3D,0xC0,0x5F,0xE4,0x03,0x04,0x01,0x80,0x83,0xE4,0x01,0x04,0x3D,0x08,0x80,0x20,0x10,0x04,0x3D,0x08,0x00,0x11,0x10,0x04,0x01,0x30,0x00,0x0E,0x0C,0x04,0x3D,0x00,0x00,0x00,0x00,0x04,0x3D,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x04,0xFE,0xFF,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x1F,0x00,0x04,0x00,0x00,0x82,0x20,0x00,0x04,0x00,0x00,0xFC,0xC0,0xFF,0x03,};
const uint8_t *_I_SDError_43x35[] = {_I_SDError_43x35_0};
-const uint8_t _I_Console_74x67_4_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0x8E,0xFF,0xE3,0x2F,0x83,0x06,0x0F,0x00,0x00,0x8C,0x76,0xFF,0xDD,0xAF,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xFA,0xFE,0xBE,0xAF,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xFA,0xFE,0xBE,0x2F,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xFC,0x7D,0x7F,0x2F,0x60,0x64,0x3B,0x00,0x00,0x8C,0xFC,0x7D,0x7F,0x2F,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xFE,0xBB,0xFF,0x26,0x63,0x74,0x3B,0x00,0x00,0x8C,0xFE,0xC7,0xFF,0xA9,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0xE0,0x80,0x03,0x23,0x80,0x05,0x0F,0x00,0x00,0x8C,0xEE,0xBE,0x7B,0x2B,0x00,0xFF,0x07,0x00,0x00,0x8C,0xEE,0xBE,0x7B,0x2B,0x73,0xF6,0x43,0x00,0x00,0x8C,0xEE,0xBE,0x7B,0x2B,0x53,0xF8,0xA0,0x00,0x00,0x8C,0x0E,0x3E,0x78,0x28,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_4[] = {_I_Console_74x67_4_0};
-
-const uint8_t _I_Console_74x67_5_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0xC6,0xFF,0xF1,0x2F,0x83,0x06,0x0F,0x00,0x00,0x8C,0xBA,0xFF,0xEE,0xAF,0x44,0xF8,0x1E,0x00,0x00,0x8C,0x7C,0x7F,0xDF,0xAF,0x44,0xF8,0x1D,0x00,0x00,0x8C,0x7C,0x7F,0xDF,0x2F,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xFE,0xBE,0xBF,0x27,0x60,0x64,0x3B,0x00,0x00,0x8C,0xFE,0xBE,0xBF,0x27,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xFE,0xDD,0x7F,0x2B,0x63,0x74,0x3B,0x00,0x00,0x8C,0xFE,0xE3,0xFF,0xAC,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0x70,0xC0,0x81,0x21,0x80,0x05,0x0F,0x00,0x00,0x8C,0x76,0xDF,0xBD,0x2D,0x00,0xFF,0x07,0x00,0x00,0x8C,0x76,0xDF,0xBD,0x2D,0x73,0xF6,0x43,0x00,0x00,0x8C,0x76,0xDF,0xBD,0x2D,0x53,0xF8,0xA0,0x00,0x00,0x8C,0x06,0x1F,0x3C,0x2C,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_5[] = {_I_Console_74x67_5_0};
-
-const uint8_t _I_Console_74x67_7_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0xF0,0x7F,0xFC,0x2F,0x83,0x06,0x0F,0x00,0x00,0x8C,0xEE,0xBF,0xFB,0xA7,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xDE,0xDF,0xF7,0xAB,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xDE,0xDF,0xF7,0x2B,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xBE,0xEF,0xEF,0x2D,0x60,0x64,0x3B,0x00,0x00,0x8C,0xBE,0xEF,0xEF,0x2D,0xB0,0x42,0x7B,0x00,0x00,0x8C,0x7E,0xF7,0xDF,0x2E,0x63,0x74,0x3B,0x00,0x00,0x8C,0xFE,0xF8,0x3F,0xAF,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0x1C,0x70,0x60,0x20,0x80,0x05,0x0F,0x00,0x00,0x8C,0xDC,0x77,0x6F,0x2F,0x00,0xFF,0x07,0x00,0x00,0x8C,0xDC,0x77,0x6F,0x2F,0x73,0xF6,0x43,0x00,0x00,0x8C,0xDC,0x77,0x6F,0x2F,0x53,0xF8,0xA0,0x00,0x00,0x8C,0xC0,0x07,0x0F,0x2F,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_7[] = {_I_Console_74x67_7_0};
-
-const uint8_t _I_Console_74x67_6_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0xE2,0xFF,0xF8,0x2F,0x83,0x06,0x0F,0x00,0x00,0x8C,0xDC,0x7F,0xF7,0xAF,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xBE,0xBF,0xEF,0xA7,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xBE,0xBF,0xEF,0x27,0xA3,0x82,0x3B,0x00,0x00,0x8C,0x7E,0xDF,0xDF,0x2B,0x60,0x64,0x3B,0x00,0x00,0x8C,0x7E,0xDF,0xDF,0x2B,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xFE,0xEE,0xBF,0x2D,0x63,0x74,0x3B,0x00,0x00,0x8C,0xFE,0xF1,0x7F,0xAE,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0x38,0xE0,0xC0,0x20,0x80,0x05,0x0F,0x00,0x00,0x8C,0xBA,0xEF,0xDE,0x2E,0x00,0xFF,0x07,0x00,0x00,0x8C,0xBA,0xEF,0xDE,0x2E,0x73,0xF6,0x43,0x00,0x00,0x8C,0xBA,0xEF,0xDE,0x2E,0x53,0xF8,0xA0,0x00,0x00,0x8C,0x82,0x0F,0x1E,0x2E,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_6[] = {_I_Console_74x67_6_0};
-
-const uint8_t _I_Console_74x67_2_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0x3E,0xFE,0x8F,0x2F,0x83,0x06,0x0F,0x00,0x00,0x8C,0xDE,0xFD,0x77,0xAF,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xEE,0xFB,0xFB,0xAE,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xEE,0xFB,0xFB,0x2E,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xF6,0xF7,0xFD,0x2D,0x60,0x64,0x3B,0x00,0x00,0x8C,0xF6,0xF7,0xFD,0x2D,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xFA,0xEF,0xFE,0x2B,0x63,0x74,0x3B,0x00,0x00,0x8C,0xFC,0x1F,0xFF,0xA7,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0x80,0x03,0x0E,0x2C,0x80,0x05,0x0F,0x00,0x00,0x8C,0xBC,0xFB,0xEE,0x2D,0x00,0xFF,0x07,0x00,0x00,0x8C,0xBC,0xFB,0xEE,0x2D,0x73,0xF6,0x43,0x00,0x00,0x8C,0xBC,0xFB,0xEE,0x2D,0x53,0xF8,0xA0,0x00,0x00,0x8C,0x3C,0xF8,0xE0,0x21,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_2[] = {_I_Console_74x67_2_0};
-
-const uint8_t _I_Console_74x67_3_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0x1E,0xFF,0xC7,0x2F,0x83,0x06,0x0F,0x00,0x00,0x8C,0xEE,0xFE,0xBB,0xAF,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xF6,0xFD,0x7D,0xAF,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xF6,0xFD,0x7D,0x2F,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xFA,0xFB,0xFE,0x2E,0x60,0x64,0x3B,0x00,0x00,0x8C,0xFA,0xFB,0xFE,0x2E,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xFC,0x77,0xFF,0x2D,0x63,0x74,0x3B,0x00,0x00,0x8C,0xFE,0x8F,0xFF,0xA3,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0xC0,0x01,0x07,0x26,0x80,0x05,0x0F,0x00,0x00,0x8C,0xDE,0x7D,0xF7,0x26,0x00,0xFF,0x07,0x00,0x00,0x8C,0xDE,0x7D,0xF7,0x26,0x73,0xF6,0x43,0x00,0x00,0x8C,0xDE,0x7D,0xF7,0x26,0x53,0xF8,0xA0,0x00,0x00,0x8C,0x1E,0x7C,0xF0,0x20,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_3[] = {_I_Console_74x67_3_0};
-
-const uint8_t _I_Console_74x67_1_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0x7E,0xFC,0x1F,0x2F,0x83,0x06,0x0F,0x00,0x00,0x8C,0xBE,0xFB,0xEF,0xAE,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xDE,0xF7,0xF7,0xAD,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xDE,0xF7,0xF7,0x2D,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xEE,0xEF,0xFB,0x2B,0x60,0x64,0x3B,0x00,0x00,0x8C,0xEE,0xEF,0xFB,0x2B,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xF6,0xDF,0xFD,0x27,0x63,0x74,0x3B,0x00,0x00,0x8C,0xF8,0x3F,0xFE,0xAF,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0x02,0x07,0x1C,0x28,0x80,0x05,0x0F,0x00,0x00,0x8C,0x7A,0xF7,0xDD,0x2B,0x00,0xFF,0x07,0x00,0x00,0x8C,0x7A,0xF7,0xDD,0x2B,0x73,0xF6,0x43,0x00,0x00,0x8C,0x7A,0xF7,0xDD,0x2B,0x53,0xF8,0xA0,0x00,0x00,0x8C,0x78,0xF0,0xC1,0x23,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_1[] = {_I_Console_74x67_1_0};
-
-const uint8_t _I_Console_74x67_0_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0xFE,0xF8,0x3F,0x2E,0x83,0x06,0x0F,0x00,0x00,0x8C,0x7E,0xF7,0xDF,0xAD,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xBE,0xEF,0xEF,0xAB,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xBE,0xEF,0xEF,0x2B,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xDE,0xDF,0xF7,0x27,0x60,0x64,0x3B,0x00,0x00,0x8C,0xDE,0xDF,0xF7,0x27,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xEC,0xBF,0xFB,0x2F,0x63,0x74,0x3B,0x00,0x00,0x8C,0xF2,0x7F,0xFC,0xAF,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0x06,0x0E,0x38,0x20,0x80,0x05,0x0F,0x00,0x00,0x8C,0xF6,0xEE,0xBB,0x27,0x00,0xFF,0x07,0x00,0x00,0x8C,0xF6,0xEE,0xBB,0x27,0x73,0xF6,0x43,0x00,0x00,0x8C,0xF6,0xEE,0xBB,0x27,0x53,0xF8,0xA0,0x00,0x00,0x8C,0xF0,0xE0,0x83,0x27,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_0[] = {_I_Console_74x67_0_0};
-
-const uint8_t _I_Console_74x67_8_0[] = {0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xFC,0x00,0xE0,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x84,0x20,0x10,0x01,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0xFC,0xF8,0xE0,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x00,0xFE,0x03,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x00,0xFF,0xE7,0x00,0x00,0x8C,0xF8,0x3F,0xFE,0x27,0x83,0x06,0x0F,0x00,0x00,0x8C,0xF6,0xDF,0xFD,0xAB,0x44,0xF8,0x1E,0x00,0x00,0x8C,0xEE,0xEF,0xFB,0xAD,0x44,0xF8,0x1D,0x00,0x00,0x8C,0xEE,0xEF,0xFB,0x2D,0xA3,0x82,0x3B,0x00,0x00,0x8C,0xDE,0xF7,0xF7,0x2E,0x60,0x64,0x3B,0x00,0x00,0x8C,0xDE,0xF7,0xF7,0x2E,0xB0,0x42,0x7B,0x00,0x00,0x8C,0xBE,0xFB,0x6F,0x2F,0x63,0x74,0x3B,0x00,0x00,0x8C,0x7E,0xFC,0x9F,0xAF,0xA4,0x8A,0x3B,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0xAF,0x44,0xF5,0x1D,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0xC3,0xFB,0x1E,0x00,0x00,0x8C,0x0E,0x38,0x30,0x20,0x80,0x05,0x0F,0x00,0x00,0x8C,0xEE,0xBB,0xB7,0x27,0x00,0xFF,0x07,0x00,0x00,0x8C,0xEE,0xBB,0xB7,0x27,0x73,0xF6,0x43,0x00,0x00,0x8C,0xEE,0xBB,0xB7,0x27,0x53,0xF8,0xA0,0x00,0x00,0x8C,0xE0,0x83,0x87,0x27,0x70,0x20,0x40,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0xFE,0xFF,0xFF,0x2F,0x03,0x00,0x00,0x00,0x00,0x8C,0x7C,0xF8,0x1C,0x20,0xE0,0x70,0x38,0x00,0x00,0x0C,0x01,0x00,0x00,0x10,0x10,0x89,0x44,0x00,0x00,0x4C,0xFE,0xFF,0xFF,0x4F,0x50,0xA9,0x74,0x00,0x00,0xEC,0x00,0x00,0x00,0xE0,0x50,0x99,0x44,0x00,0x00,0x4C,0x00,0x00,0x00,0x40,0xE0,0x70,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x30,0x1C,0x0E,0x00,0x00,0x00,0x00,0x48,0x02,0x00,0x30,0x22,0x11,0xB6,0xE1,0xF1,0x78,0x90,0x00,0x00,0x68,0x2A,0x15,0x00,0x10,0x0A,0x85,0x20,0x01,0x00,0xC4,0x2A,0x13,0xB6,0xE1,0xF1,0x78,0x20,0x01,0x00,0xC4,0x1C,0x0F,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x88,0x83,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xBE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF2,0xFF,0xFF,0xFF,0xE1,0xFF,0xF0,0x03,0x00,0x00,0x3D,0x00,0x00,0xFC,0x90,0x3F,0xE1,0x03,0x00,0x80,0x3E,0x33,0xC6,0x7C,0x88,0x3F,0xC2,0x03,0x00,0x40,0xBE,0x44,0x29,0x7C,0x44,0x5F,0xC4,0x03,0x00,0x40,0xBE,0x34,0xE6,0x7C,0x22,0x9F,0xC8,0x03,0x00,0x40,0xBE,0x44,0x29,0x7D,0x11,0x1F,0xD1,0x03,0x00,0x40,0x3E,0x33,0xC6,0xFC,0x08,0x1F,0xE2,0x03,0x00,0x40,0x3E,0x00,0x00,0xFC,0x84,0x3F,0xE4,0x03,0x00,0x80,0xFE,0xFF,0xFF,0xFF,0xC3,0x7F,0xF8,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7C,0xE0,0x03,0x1F,0x7C,0x7C,0x18,0x03,0x00,0x38,0x82,0x10,0x84,0x20,0x44,0x44,0xA4,0x00,0x00,0x1E,0xFE,0xF0,0x87,0x3F,0x22,0x22,0xBC,0x03,0x00,0xC7,0x07,0x3E,0xF0,0x01,0x1F,0x1F,0x00,0x00,0xC0,0x23,0x08,0x41,0x08,0x02,0x11,0x11,0xC6,0x00,0xE0,0xE0,0x0F,0x7F,0xF8,0x83,0x88,0x08,0x29,0x01,0x78,0x7C,0xE0,0x03,0x1F,0xC0,0xC7,0x07,0xEF,0x01,0x1C,0x82,0x10,0x84,0x20,0x40,0x44,0x04,0x00,0x00,0x0F,0xFE,0xF0,0x87,0x3F,0x20,0x22,0x82,0x31,0x00,};
-const uint8_t *_I_Console_74x67_8[] = {_I_Console_74x67_8_0};
-
-const uint8_t _I_food8_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x18,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x14,0x00,0x00,0x00,0x02,0x04,0x00,0x80,0x77,0x00,0x00,0x00,0x06,0x08,0x0F,0x40,0x40,0x00,0x00,0x00,0x0A,0x88,0x10,0x20,0x26,0x00,0x00,0x00,0x82,0x49,0x20,0x20,0x14,0x00,0x00,0x00,0x84,0x29,0x44,0xA0,0x08,0x00,0x00,0x00,0x04,0x28,0x4A,0x20,0x08,0x00,0x00,0x00,0x08,0x38,0x84,0x60,0x04,0x00,0x00,0x00,0x30,0x30,0x80,0xC0,0x03,0x00,0x00,0x00,0xC0,0xFD,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x81,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x82,0x02,0x00,0x00,0x00,0x38,0x00,0x0A,0x84,0x05,0x00,0x00,0x00,0xC8,0x01,0x06,0x28,0x0B,0x00,0x00,0x00,0x38,0x06,0x0B,0x50,0x15,0x00,0x00,0x00,0xC0,0x09,0x17,0xB0,0x13,0x00,0x00,0x00,0x00,0x12,0x0B,0x60,0x25,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x4B,0x00,0x00,0x00,0x00,0x14,0x0E,0x40,0x47,0x00,0x00,0x00,0x00,0x14,0x16,0x80,0x8B,0x00,0x00,0x00,0x7E,0x14,0x2E,0x00,0x17,0x01,0x00,0x80,0x81,0x0B,0x5C,0x00,0x0B,0x01,0x00,0xC0,0x00,0x0D,0x2C,0x00,0x16,0x02,0x00,0xC0,0x00,0x35,0x58,0x00,0x2E,0x04,0x00,0x40,0x81,0x42,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x86,0x83,0x70,0x01,0xBC,0x08,0x00,0xC0,0x19,0x00,0xB1,0x00,0x58,0x09,0x00,0x40,0x67,0x00,0x72,0x01,0xB8,0x10,0x00,0xC0,0x9A,0x07,0xE2,0x02,0x70,0x11,0x00,0x40,0x65,0xF8,0x63,0x05,0xF0,0x22,0x00,0xA0,0x82,0x07,0xC2,0x0A,0xA0,0x25,0x00,0x60,0x01,0xF8,0xC1,0x15,0x60,0x4B,0x00,0xA0,0x02,0xE8,0x80,0x0B,0xC0,0x46,0x00,0x60,0x01,0x74,0x80,0x15,0x40,0x58,0x00,0xA0,0x00,0x7A,0x00,0x2B,0x80,0x60,0x00,0x60,0x01,0x3D,0x00,0x56,0x80,0x80,0x00,0xB0,0x80,0x1A,0x00,0xAE,0x00,0x21,0x01,0x50,0x41,0x1D,0x00,0x5C,0x01,0x51,0x01,0xB0,0x80,0x0E,0x00,0xB8,0x02,0x21,0x02,0x50,0x40,0x07,0x00,0x70,0x05,0x01,0x02,0xB0,0xA0,0x07,0x00,0xE0,0x8A,0x01,0x02,0x58,0xD0,0x03,0x00,0xC0,0xF5,0x01,0x01,0x28,0xA8,0x01,0x00,0x00,0xFF,0xC7,0x00,0x58,0xD4,0x01,0x07,0x00,0x00,0x38,0x00,0xB0,0xEA,0xF0,0x18,0x06,0x00,0x00,0x00,0x50,0x75,0x0C,0x60,0x09,0x00,0x00,0x00,0xA0,0x7A,0x42,0xC0,0x08,0x00,0x00,0x00,0xC0,0xB5,0x05,0x40,0x10,0x00,0x00,0x00,0x00,0x5F,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xA0,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food8_61x98[] = {_I_food8_61x98_0};
-
-const uint8_t _I_food5_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x08,0x00,0xC0,0x00,0x00,0x00,0x00,0x0A,0x08,0x0F,0xA0,0x00,0x00,0x00,0x00,0x82,0x89,0x10,0xBC,0x03,0x00,0x00,0x00,0x84,0x49,0x20,0x02,0x02,0x00,0x00,0x00,0x04,0x28,0x44,0x31,0x01,0x00,0x00,0x00,0x08,0x38,0x4A,0xA1,0x00,0x00,0x00,0x00,0x30,0x30,0x84,0x45,0x00,0x00,0x00,0x00,0xC0,0x2D,0x80,0x41,0x00,0x00,0x00,0x00,0x00,0xF6,0x80,0x23,0x00,0x00,0x00,0x00,0x00,0x08,0x81,0x1F,0x00,0x00,0x00,0x38,0x00,0x04,0x82,0x02,0x00,0x00,0x00,0xC8,0x01,0x0A,0x84,0x05,0x00,0x00,0x00,0x38,0x06,0x06,0x28,0x0B,0x00,0x00,0x00,0xC0,0x09,0x0B,0x50,0x15,0x00,0x00,0x00,0x00,0x12,0x17,0xB0,0x13,0x00,0x00,0x00,0x00,0x14,0x0B,0x60,0x25,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x4B,0x00,0x00,0x00,0x00,0x14,0x0E,0x40,0x47,0x00,0x00,0x00,0x7E,0x14,0x16,0x80,0x8B,0x00,0x00,0x80,0x81,0x0B,0x2E,0x00,0x17,0x01,0x00,0xC0,0x00,0x0D,0x5C,0x00,0x0B,0x01,0x00,0xC0,0x00,0x35,0x2C,0x00,0x16,0x02,0x00,0x40,0x81,0x42,0x58,0x00,0x2E,0x04,0x00,0xC0,0x86,0x83,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x19,0x00,0x71,0x01,0xBC,0x08,0x00,0x40,0x67,0x00,0xB2,0x00,0x58,0x09,0x00,0xC0,0x9A,0x07,0x72,0x01,0xB8,0x10,0x00,0x40,0x65,0xF8,0xE3,0x02,0x70,0x11,0x00,0xA0,0x82,0x07,0x62,0x05,0xF0,0x22,0x00,0x60,0x01,0xF8,0xC1,0x0A,0xA0,0x25,0x00,0xA0,0x02,0xE8,0xC0,0x15,0x60,0x4B,0x00,0x60,0x01,0x74,0x80,0x0B,0xC0,0x46,0x00,0xA0,0x00,0x7A,0x80,0x15,0x40,0x58,0x00,0x60,0x01,0x3D,0x00,0x2B,0x80,0x60,0x00,0xB0,0x80,0x1A,0x00,0x56,0x80,0x80,0x00,0x50,0x41,0x1D,0x00,0xAE,0x00,0x21,0x01,0xB0,0x80,0x0E,0x00,0x5C,0x01,0x51,0x01,0x50,0x40,0x07,0x00,0xB8,0x02,0x21,0x02,0xB0,0xA0,0x07,0x00,0x70,0x05,0x01,0x02,0x58,0xD0,0x03,0x00,0xE0,0x8A,0x01,0x02,0x28,0xA8,0x01,0x00,0xC0,0xF5,0x01,0x01,0x58,0xD4,0x01,0x00,0x00,0xFF,0xC7,0x00,0xB0,0xEA,0x00,0x07,0x00,0x00,0x38,0x00,0x50,0x75,0xF0,0x18,0x06,0x00,0x00,0x00,0xA0,0x7A,0x0C,0x60,0x09,0x00,0x00,0x00,0xC0,0x35,0x42,0xC0,0x08,0x00,0x00,0x00,0x00,0x9F,0x05,0x40,0x10,0x00,0x00,0x00,0x00,0x40,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xA0,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food5_61x98[] = {_I_food5_61x98_0};
-
-const uint8_t _I_food3_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x84,0x07,0x00,0x06,0x00,0x00,0x00,0xC1,0x44,0x08,0x00,0x05,0x00,0x00,0x00,0xC2,0x24,0x10,0xE0,0x1D,0x00,0x00,0x00,0x02,0x14,0x22,0x10,0x10,0x00,0x00,0x00,0x04,0x1C,0x25,0x88,0x09,0x00,0x00,0x00,0x18,0x18,0x42,0x08,0x05,0x00,0x00,0x00,0xE0,0x16,0x40,0x28,0x02,0x00,0x00,0x00,0x00,0x7B,0x40,0x08,0x02,0x00,0x00,0x00,0x00,0x84,0xC0,0x18,0x01,0x00,0x00,0x00,0x00,0x02,0x41,0xF1,0x00,0x00,0x00,0x00,0x00,0x05,0xC2,0x02,0x00,0x00,0x00,0x38,0x00,0x03,0x94,0x05,0x00,0x00,0x00,0xC8,0x81,0x05,0xA8,0x0A,0x00,0x00,0x00,0x38,0x86,0x0B,0xD8,0x09,0x00,0x00,0x00,0xC0,0x89,0x05,0xB0,0x12,0x00,0x00,0x00,0x00,0x92,0x0B,0xE0,0x25,0x00,0x00,0x00,0x00,0x14,0x07,0xA0,0x23,0x00,0x00,0x00,0x00,0x14,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0x80,0x8B,0x00,0x00,0x00,0x7E,0x14,0x2E,0x80,0x85,0x00,0x00,0x80,0x81,0x0B,0x16,0x00,0x0B,0x01,0x00,0xC0,0x00,0x0D,0x2C,0x00,0x17,0x02,0x00,0xC0,0x00,0x35,0x5C,0x00,0x2E,0x02,0x00,0x40,0x81,0x42,0xB8,0x00,0x5E,0x04,0x00,0xC0,0x86,0x83,0x58,0x00,0xAC,0x04,0x00,0xC0,0x19,0x00,0xB9,0x00,0x5C,0x08,0x00,0x40,0x67,0x00,0x72,0x01,0xB8,0x08,0x00,0xC0,0x9A,0x07,0xB2,0x02,0x78,0x11,0x00,0x40,0x65,0xF8,0x63,0x05,0xD0,0x12,0x00,0xA0,0x82,0x07,0xE2,0x0A,0xB0,0x25,0x00,0x60,0x01,0xF8,0xC1,0x05,0x60,0x23,0x00,0xA0,0x02,0xE8,0xC0,0x0A,0x20,0x2C,0x00,0x60,0x01,0x74,0x80,0x15,0x40,0x30,0x00,0xA0,0x00,0x7A,0x00,0x2B,0x40,0x40,0x00,0x60,0x01,0x3D,0x00,0x57,0x80,0x90,0x00,0xB0,0x80,0x1A,0x00,0xAE,0x80,0xA8,0x00,0x50,0x41,0x1D,0x00,0x5C,0x81,0x10,0x01,0xB0,0x80,0x0E,0x00,0xB8,0x82,0x00,0x01,0x50,0x40,0x07,0x00,0x70,0xC5,0x00,0x01,0xB0,0xA0,0x07,0x00,0xE0,0xFA,0x80,0x00,0x58,0xD0,0x03,0x00,0x80,0xFF,0x63,0x00,0x28,0xA8,0x01,0x07,0x00,0x00,0x1C,0x00,0x58,0xD4,0xF1,0x18,0x06,0x00,0x00,0x00,0xB0,0xEA,0x0C,0x60,0x09,0x00,0x00,0x00,0x50,0x75,0x42,0xC0,0x08,0x00,0x00,0x00,0xA0,0xBA,0x05,0x40,0x10,0x00,0x00,0x00,0xC0,0x55,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xAF,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food3_61x98[] = {_I_food3_61x98_0};
-
-const uint8_t _I_food9_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x02,0x00,0x00,0x18,0x00,0x00,0x80,0x02,0x82,0x07,0x00,0x14,0x00,0x00,0x80,0x60,0x42,0x08,0x80,0x77,0x00,0x00,0x00,0x61,0x22,0x10,0x40,0x40,0x00,0x00,0x00,0x01,0x12,0x22,0x20,0x26,0x00,0x00,0x00,0x02,0x16,0x25,0x20,0x14,0x00,0x00,0x00,0x0C,0x14,0x42,0xA0,0x08,0x00,0x00,0x00,0x70,0x13,0x40,0x20,0x08,0x00,0x00,0x00,0x80,0x79,0x40,0x60,0x04,0x00,0x00,0x00,0x00,0x84,0xC0,0xC0,0x03,0x00,0x00,0x00,0x00,0x02,0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0xC2,0x02,0x00,0x00,0x00,0x00,0x00,0x03,0x94,0x05,0x00,0x00,0x00,0x38,0x80,0x05,0xA8,0x0A,0x00,0x00,0x00,0xC8,0x81,0x0B,0xD8,0x09,0x00,0x00,0x00,0x38,0x86,0x05,0xB0,0x12,0x00,0x00,0x00,0xC0,0x89,0x0B,0xE0,0x25,0x00,0x00,0x00,0x00,0x12,0x07,0xA0,0x23,0x00,0x00,0x00,0x00,0x14,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0x80,0x8B,0x00,0x00,0x00,0x00,0x14,0x2E,0x80,0x85,0x00,0x00,0x00,0x7E,0x14,0x16,0x00,0x0B,0x01,0x00,0x80,0x81,0x0B,0x2C,0x00,0x17,0x02,0x00,0xC0,0x00,0x0D,0x5C,0x00,0x2E,0x02,0x00,0xC0,0x00,0x35,0xB8,0x00,0x5E,0x04,0x00,0x40,0x81,0x42,0x58,0x00,0xAC,0x04,0x00,0xC0,0x86,0x83,0xB8,0x00,0x5C,0x08,0x00,0xC0,0x19,0x00,0x71,0x01,0xB8,0x08,0x00,0x40,0x67,0x00,0xB2,0x02,0x78,0x11,0x00,0xC0,0x9A,0x07,0x62,0x05,0xD0,0x12,0x00,0x40,0x65,0xF8,0xE3,0x0A,0xB0,0x25,0x00,0xA0,0x82,0x07,0xC2,0x05,0x60,0x23,0x00,0x60,0x01,0xF8,0xC1,0x0A,0x20,0x2C,0x00,0xA0,0x02,0xE8,0x80,0x15,0x40,0x30,0x00,0x60,0x01,0x74,0x00,0x2B,0x40,0x40,0x00,0xA0,0x00,0x7A,0x00,0x57,0x80,0x90,0x00,0x60,0x01,0x3D,0x00,0xAE,0x80,0xA8,0x00,0xB0,0x80,0x1A,0x00,0x5C,0x81,0x10,0x01,0x50,0x41,0x1D,0x00,0xB8,0x82,0x00,0x01,0xB0,0x80,0x0E,0x00,0x70,0xC5,0x00,0x01,0x50,0x40,0x07,0x00,0xE0,0xFA,0x80,0x00,0xB0,0xA0,0x07,0x00,0x80,0xFF,0x63,0x00,0x58,0xD0,0x03,0x07,0x00,0x00,0x1C,0x00,0x28,0xA8,0xF1,0x18,0x06,0x00,0x00,0x00,0x58,0xD4,0x0D,0x60,0x09,0x00,0x00,0x00,0xB0,0x6A,0x42,0xC0,0x08,0x00,0x00,0x00,0x50,0xB5,0x05,0x40,0x10,0x00,0x00,0x00,0xA0,0x5A,0x00,0x60,0x10,0x00,0x00,0x00,0xC0,0xA5,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x17,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food9_61x98[] = {_I_food9_61x98_0};
-
-const uint8_t _I_food12_61x98_0[] = {0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xC2,0x03,0x00,0x00,0x00,0x00,0x00,0xB8,0x21,0x04,0x00,0x00,0x00,0x00,0x00,0xC0,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x11,0x80,0x01,0x00,0x00,0x00,0x00,0x88,0x12,0x40,0x01,0x00,0x00,0x00,0x00,0x08,0x21,0x78,0x07,0x00,0x00,0x00,0x00,0x08,0x20,0x04,0x04,0x00,0x00,0x00,0x00,0x3C,0x20,0x62,0x02,0x00,0x00,0x00,0x00,0x42,0x60,0x42,0x01,0x00,0x00,0x00,0x00,0x81,0xA0,0x8A,0x00,0x00,0x00,0x00,0x80,0x02,0x61,0x83,0x00,0x00,0x00,0x00,0x80,0x01,0xCA,0x46,0x00,0x00,0x00,0x00,0xC0,0x02,0x54,0x3D,0x00,0x00,0x00,0x00,0xC0,0x05,0xEC,0x04,0x00,0x00,0x00,0x38,0xC0,0x02,0x58,0x09,0x00,0x00,0x00,0xC8,0xC1,0x05,0xF0,0x12,0x00,0x00,0x00,0x38,0x86,0x03,0xD0,0x11,0x00,0x00,0x00,0xC0,0x89,0x05,0xE0,0x22,0x00,0x00,0x00,0x00,0x92,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x42,0x00,0x00,0x00,0x00,0x14,0x0B,0x80,0x85,0x00,0x00,0x00,0x00,0x14,0x16,0x80,0x0B,0x01,0x00,0x00,0x7E,0x14,0x2E,0x00,0x17,0x01,0x00,0x80,0x81,0x0B,0x5C,0x00,0x2F,0x02,0x00,0xC0,0x00,0x0D,0x2C,0x00,0x56,0x02,0x00,0xC0,0x00,0x35,0x5C,0x00,0x2E,0x04,0x00,0x40,0x81,0x42,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x86,0x83,0x58,0x01,0xBC,0x08,0x00,0xC0,0x19,0x00,0xB1,0x02,0x68,0x09,0x00,0x40,0x67,0x00,0x72,0x05,0xD8,0x12,0x00,0xC0,0x9A,0x07,0xE2,0x02,0xB0,0x11,0x00,0x40,0x65,0xF8,0x63,0x05,0x10,0x16,0x00,0xA0,0x82,0x07,0xC2,0x0A,0x20,0x18,0x00,0x60,0x01,0xF8,0x81,0x15,0x20,0x20,0x00,0xA0,0x02,0xE8,0x80,0x2B,0x40,0x48,0x00,0x60,0x01,0x74,0x00,0x57,0x40,0x54,0x00,0xA0,0x00,0x7A,0x00,0xAE,0x40,0x88,0x00,0x60,0x01,0x3D,0x00,0x5C,0x41,0x80,0x00,0xB0,0x80,0x1A,0x00,0xB8,0x62,0x80,0x00,0x50,0x41,0x1D,0x00,0x70,0x7D,0x40,0x00,0xB0,0x80,0x0E,0x00,0xC0,0xFF,0x31,0x00,0x50,0x40,0x07,0x07,0x00,0x00,0x0E,0x00,0xB0,0xA0,0xF3,0x18,0x06,0x00,0x00,0x00,0x58,0xD0,0x0D,0x60,0x09,0x00,0x00,0x00,0x28,0x28,0x42,0xC0,0x08,0x00,0x00,0x00,0x58,0x94,0x05,0x40,0x10,0x00,0x00,0x00,0xB0,0x4A,0x00,0x60,0x10,0x00,0x00,0x00,0x50,0xA5,0x80,0x30,0xDC,0x00,0x00,0x00,0xA0,0x12,0x00,0x18,0x7E,0x01,0x00,0x00,0xC0,0x09,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x25,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food12_61x98[] = {_I_food12_61x98_0};
-
-const uint8_t _I_food4_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x00,0x00,0x18,0x00,0x00,0x00,0x06,0x88,0x07,0x00,0x14,0x00,0x00,0x00,0x0A,0x48,0x08,0x80,0x77,0x00,0x00,0x00,0x82,0x29,0x10,0x40,0x40,0x00,0x00,0x00,0x84,0x19,0x22,0x20,0x26,0x00,0x00,0x00,0x04,0x18,0x25,0x20,0x14,0x00,0x00,0x00,0x08,0x18,0x42,0xA0,0x08,0x00,0x00,0x00,0x30,0x10,0x40,0x20,0x08,0x00,0x00,0x00,0xC0,0x7D,0x40,0x60,0x04,0x00,0x00,0x00,0x00,0x86,0xC0,0xC0,0x03,0x00,0x00,0x00,0x00,0x02,0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0xC2,0x02,0x00,0x00,0x00,0x38,0x00,0x03,0x94,0x05,0x00,0x00,0x00,0xC8,0x81,0x05,0xA8,0x0A,0x00,0x00,0x00,0x38,0x86,0x0B,0xD8,0x09,0x00,0x00,0x00,0xC0,0x89,0x05,0xB0,0x12,0x00,0x00,0x00,0x00,0x92,0x0B,0xE0,0x25,0x00,0x00,0x00,0x00,0x14,0x07,0xA0,0x23,0x00,0x00,0x00,0x00,0x14,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0x80,0x8B,0x00,0x00,0x00,0x7E,0x14,0x2E,0x80,0x85,0x00,0x00,0x80,0x81,0x0B,0x16,0x00,0x0B,0x01,0x00,0xC0,0x00,0x0D,0x2C,0x00,0x17,0x02,0x00,0xC0,0x00,0x35,0x5C,0x00,0x2E,0x02,0x00,0x40,0x81,0x42,0xB8,0x00,0x5E,0x04,0x00,0xC0,0x86,0x83,0x58,0x00,0xAC,0x04,0x00,0xC0,0x19,0x00,0xB9,0x00,0x5C,0x08,0x00,0x40,0x67,0x00,0x72,0x01,0xB8,0x08,0x00,0xC0,0x9A,0x07,0xB2,0x02,0x78,0x11,0x00,0x40,0x65,0xF8,0x63,0x05,0xD0,0x12,0x00,0xA0,0x82,0x07,0xE2,0x0A,0xB0,0x25,0x00,0x60,0x01,0xF8,0xC1,0x05,0x60,0x23,0x00,0xA0,0x02,0xE8,0xC0,0x0A,0x20,0x2C,0x00,0x60,0x01,0x74,0x80,0x15,0x40,0x30,0x00,0xA0,0x00,0x7A,0x00,0x2B,0x40,0x40,0x00,0x60,0x01,0x3D,0x00,0x57,0x80,0x90,0x00,0xB0,0x80,0x1A,0x00,0xAE,0x80,0xA8,0x00,0x50,0x41,0x1D,0x00,0x5C,0x81,0x10,0x01,0xB0,0x80,0x0E,0x00,0xB8,0x82,0x00,0x01,0x50,0x40,0x07,0x00,0x70,0xC5,0x00,0x01,0xB0,0xA0,0x07,0x00,0xE0,0xFA,0x80,0x00,0x58,0xD0,0x03,0x00,0x80,0xFF,0x63,0x00,0x28,0xA8,0x01,0x07,0x00,0x00,0x1C,0x00,0x58,0xD4,0xF1,0x18,0x06,0x00,0x00,0x00,0xB0,0xEA,0x0C,0x60,0x09,0x00,0x00,0x00,0x50,0x75,0x42,0xC0,0x08,0x00,0x00,0x00,0xA0,0xBA,0x05,0x40,0x10,0x00,0x00,0x00,0xC0,0x55,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xAF,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food4_61x98[] = {_I_food4_61x98_0};
-
-const uint8_t _I_food2_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xC1,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x23,0x04,0x00,0x00,0x00,0x00,0x00,0x06,0x12,0x08,0x80,0x01,0x00,0x00,0x00,0xB8,0x09,0x11,0x40,0x01,0x00,0x00,0x00,0xC0,0x88,0x12,0x78,0x07,0x00,0x00,0x00,0x00,0x08,0x21,0x04,0x04,0x00,0x00,0x00,0x00,0x08,0x20,0x62,0x02,0x00,0x00,0x00,0x00,0x3C,0x20,0x42,0x01,0x00,0x00,0x00,0x00,0x42,0x60,0x8A,0x00,0x00,0x00,0x00,0x00,0x81,0xA0,0x82,0x00,0x00,0x00,0x00,0x80,0x02,0x61,0x47,0x00,0x00,0x00,0x00,0x80,0x01,0xCA,0x3E,0x00,0x00,0x00,0x00,0xC0,0x02,0x54,0x05,0x00,0x00,0x00,0x38,0xC0,0x05,0xEC,0x04,0x00,0x00,0x00,0xC8,0xC1,0x02,0x58,0x09,0x00,0x00,0x00,0x38,0xC6,0x05,0xF0,0x12,0x00,0x00,0x00,0xC0,0x89,0x03,0xD0,0x11,0x00,0x00,0x00,0x00,0x92,0x05,0xE0,0x22,0x00,0x00,0x00,0x00,0x94,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x42,0x00,0x00,0x00,0x00,0x14,0x0B,0x80,0x85,0x00,0x00,0x00,0x7E,0x14,0x16,0x80,0x0B,0x01,0x00,0x80,0x81,0x0B,0x2E,0x00,0x17,0x01,0x00,0xC0,0x00,0x0D,0x5C,0x00,0x2F,0x02,0x00,0xC0,0x00,0x35,0x2C,0x00,0x56,0x02,0x00,0x40,0x81,0x42,0x5C,0x00,0x2E,0x04,0x00,0xC0,0x86,0x83,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x19,0x00,0x59,0x01,0xBC,0x08,0x00,0x40,0x67,0x00,0xB2,0x02,0x68,0x09,0x00,0xC0,0x9A,0x07,0x72,0x05,0xD8,0x12,0x00,0x40,0x65,0xF8,0xE3,0x02,0xB0,0x11,0x00,0xA0,0x82,0x07,0x62,0x05,0x10,0x16,0x00,0x60,0x01,0xF8,0xC1,0x0A,0x20,0x18,0x00,0xA0,0x02,0xE8,0x80,0x15,0x20,0x20,0x00,0x60,0x01,0x74,0x80,0x2B,0x40,0x48,0x00,0xA0,0x00,0x7A,0x00,0x57,0x40,0x54,0x00,0x60,0x01,0x3D,0x00,0xAE,0x40,0x88,0x00,0xB0,0x80,0x1A,0x00,0x5C,0x41,0x80,0x00,0x50,0x41,0x1D,0x00,0xB8,0x62,0x80,0x00,0xB0,0x80,0x0E,0x00,0x70,0x7D,0x40,0x00,0x50,0x40,0x07,0x00,0xC0,0xFF,0x31,0x00,0xB0,0xA0,0x07,0x07,0x00,0x00,0x0E,0x00,0x58,0xD0,0xF3,0x18,0x06,0x00,0x00,0x00,0x28,0xA8,0x0D,0x60,0x09,0x00,0x00,0x00,0x58,0x54,0x42,0xC0,0x08,0x00,0x00,0x00,0xB0,0xAA,0x05,0x40,0x10,0x00,0x00,0x00,0x50,0x55,0x00,0x60,0x10,0x00,0x00,0x00,0xA0,0xAA,0x80,0x30,0xDC,0x00,0x00,0x00,0xC0,0x15,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x0B,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food2_61x98[] = {_I_food2_61x98_0};
-
-const uint8_t _I_food7_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x08,0x00,0x00,0x06,0x00,0x00,0x00,0x0A,0x08,0x0F,0x00,0x05,0x00,0x00,0x00,0x82,0x89,0x10,0xE0,0x1D,0x00,0x00,0x00,0x84,0x49,0x20,0x10,0x10,0x00,0x00,0x00,0x04,0x28,0x44,0x88,0x09,0x00,0x00,0x00,0x08,0x38,0x4A,0x08,0x05,0x00,0x00,0x00,0x30,0x30,0x84,0x28,0x02,0x00,0x00,0x00,0xC0,0x2D,0x80,0x08,0x02,0x00,0x00,0x00,0x00,0xF6,0x80,0x18,0x01,0x00,0x00,0x00,0x00,0x08,0x81,0xF1,0x00,0x00,0x00,0x00,0x00,0x04,0x82,0x02,0x00,0x00,0x00,0x38,0x00,0x0A,0x84,0x05,0x00,0x00,0x00,0xC8,0x01,0x06,0x28,0x0B,0x00,0x00,0x00,0x38,0x06,0x0B,0x50,0x15,0x00,0x00,0x00,0xC0,0x09,0x17,0xB0,0x13,0x00,0x00,0x00,0x00,0x12,0x0B,0x60,0x25,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x4B,0x00,0x00,0x00,0x00,0x14,0x0E,0x40,0x47,0x00,0x00,0x00,0x00,0x14,0x16,0x80,0x8B,0x00,0x00,0x00,0x7E,0x14,0x2E,0x00,0x17,0x01,0x00,0x80,0x81,0x0B,0x5C,0x00,0x0B,0x01,0x00,0xC0,0x00,0x0D,0x2C,0x00,0x16,0x02,0x00,0xC0,0x00,0x35,0x58,0x00,0x2E,0x04,0x00,0x40,0x81,0x42,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x86,0x83,0x70,0x01,0xBC,0x08,0x00,0xC0,0x19,0x00,0xB1,0x00,0x58,0x09,0x00,0x40,0x67,0x00,0x72,0x01,0xB8,0x10,0x00,0xC0,0x9A,0x07,0xE2,0x02,0x70,0x11,0x00,0x40,0x65,0xF8,0x63,0x05,0xF0,0x22,0x00,0xA0,0x82,0x07,0xC2,0x0A,0xA0,0x25,0x00,0x60,0x01,0xF8,0xC1,0x15,0x60,0x4B,0x00,0xA0,0x02,0xE8,0x80,0x0B,0xC0,0x46,0x00,0x60,0x01,0x74,0x80,0x15,0x40,0x58,0x00,0xA0,0x00,0x7A,0x00,0x2B,0x80,0x60,0x00,0x60,0x01,0x3D,0x00,0x56,0x80,0x80,0x00,0xB0,0x80,0x1A,0x00,0xAE,0x00,0x21,0x01,0x50,0x41,0x1D,0x00,0x5C,0x01,0x51,0x01,0xB0,0x80,0x0E,0x00,0xB8,0x02,0x21,0x02,0x50,0x40,0x07,0x00,0x70,0x05,0x01,0x02,0xB0,0xA0,0x07,0x00,0xE0,0x8A,0x01,0x02,0x58,0xD0,0x03,0x00,0xC0,0xF5,0x01,0x01,0x28,0xA8,0x01,0x00,0x00,0xFF,0xC7,0x00,0x58,0xD4,0x01,0x07,0x00,0x00,0x38,0x00,0xB0,0xEA,0xF0,0x18,0x06,0x00,0x00,0x00,0x50,0x75,0x0C,0x60,0x09,0x00,0x00,0x00,0xA0,0x7A,0x42,0xC0,0x08,0x00,0x00,0x00,0xC0,0xB5,0x05,0x40,0x10,0x00,0x00,0x00,0x00,0x5F,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xA0,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food7_61x98[] = {_I_food7_61x98_0};
-
-const uint8_t _I_food11_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xC1,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x23,0x04,0x00,0x00,0x00,0x00,0x00,0x06,0x12,0x08,0x00,0x00,0x00,0x00,0x00,0xB8,0x09,0x11,0x80,0x01,0x00,0x00,0x00,0xC0,0x88,0x12,0x40,0x01,0x00,0x00,0x00,0x00,0x08,0x21,0x78,0x07,0x00,0x00,0x00,0x00,0x08,0x20,0x04,0x04,0x00,0x00,0x00,0x00,0x3C,0x20,0x62,0x02,0x00,0x00,0x00,0x00,0x42,0x60,0x42,0x01,0x00,0x00,0x00,0x00,0x81,0xA0,0x8A,0x00,0x00,0x00,0x00,0x80,0x02,0x61,0x83,0x00,0x00,0x00,0x00,0x80,0x01,0xCA,0x46,0x00,0x00,0x00,0x00,0xC0,0x02,0x54,0x3D,0x00,0x00,0x00,0x00,0xC0,0x05,0xEC,0x04,0x00,0x00,0x00,0x38,0xC0,0x02,0x58,0x09,0x00,0x00,0x00,0xC8,0xC1,0x05,0xF0,0x12,0x00,0x00,0x00,0x38,0x86,0x03,0xD0,0x11,0x00,0x00,0x00,0xC0,0x89,0x05,0xE0,0x22,0x00,0x00,0x00,0x00,0x92,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x42,0x00,0x00,0x00,0x00,0x14,0x0B,0x80,0x85,0x00,0x00,0x00,0x00,0x14,0x16,0x80,0x0B,0x01,0x00,0x00,0x7E,0x14,0x2E,0x00,0x17,0x01,0x00,0x80,0x81,0x0B,0x5C,0x00,0x2F,0x02,0x00,0xC0,0x00,0x0D,0x2C,0x00,0x56,0x02,0x00,0xC0,0x00,0x35,0x5C,0x00,0x2E,0x04,0x00,0x40,0x81,0x42,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x86,0x83,0x58,0x01,0xBC,0x08,0x00,0xC0,0x19,0x00,0xB1,0x02,0x68,0x09,0x00,0x40,0x67,0x00,0x72,0x05,0xD8,0x12,0x00,0xC0,0x9A,0x07,0xE2,0x02,0xB0,0x11,0x00,0x40,0x65,0xF8,0x63,0x05,0x10,0x16,0x00,0xA0,0x82,0x07,0xC2,0x0A,0x20,0x18,0x00,0x60,0x01,0xF8,0x81,0x15,0x20,0x20,0x00,0xA0,0x02,0xE8,0x80,0x2B,0x40,0x48,0x00,0x60,0x01,0x74,0x00,0x57,0x40,0x54,0x00,0xA0,0x00,0x7A,0x00,0xAE,0x40,0x88,0x00,0x60,0x01,0x3D,0x00,0x5C,0x41,0x80,0x00,0xB0,0x80,0x1A,0x00,0xB8,0x62,0x80,0x00,0x50,0x41,0x1D,0x00,0x70,0x7D,0x40,0x00,0xB0,0x80,0x0E,0x00,0xC0,0xFF,0x31,0x00,0x50,0x40,0x07,0x07,0x00,0x00,0x0E,0x00,0xB0,0xA0,0xF3,0x18,0x06,0x00,0x00,0x00,0x58,0xD0,0x0D,0x60,0x09,0x00,0x00,0x00,0x28,0x28,0x42,0xC0,0x08,0x00,0x00,0x00,0x58,0x94,0x05,0x40,0x10,0x00,0x00,0x00,0xB0,0x4A,0x00,0x60,0x10,0x00,0x00,0x00,0x50,0xA5,0x80,0x30,0xDC,0x00,0x00,0x00,0xA0,0x12,0x00,0x18,0x7E,0x01,0x00,0x00,0xC0,0x09,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x25,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food11_61x98[] = {_I_food11_61x98_0};
-
-const uint8_t _I_food1_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xC2,0x03,0x00,0x00,0x00,0x00,0x00,0xB8,0x21,0x04,0xC0,0x00,0x00,0x00,0x00,0xC0,0x10,0x08,0xA0,0x00,0x00,0x00,0x00,0x00,0x08,0x11,0xBC,0x03,0x00,0x00,0x00,0x00,0x88,0x12,0x02,0x02,0x00,0x00,0x00,0x00,0x08,0x21,0x31,0x01,0x00,0x00,0x00,0x00,0x08,0x20,0xA1,0x00,0x00,0x00,0x00,0x00,0x3C,0x20,0x45,0x00,0x00,0x00,0x00,0x00,0x42,0x60,0x41,0x00,0x00,0x00,0x00,0x00,0x81,0xA0,0x23,0x00,0x00,0x00,0x00,0x80,0x02,0x61,0x1F,0x00,0x00,0x00,0x00,0x80,0x01,0xCA,0x02,0x00,0x00,0x00,0x00,0xC0,0x02,0x54,0x05,0x00,0x00,0x00,0x38,0xC0,0x05,0xEC,0x04,0x00,0x00,0x00,0xC8,0xC1,0x02,0x58,0x09,0x00,0x00,0x00,0x38,0xC6,0x05,0xF0,0x12,0x00,0x00,0x00,0xC0,0x89,0x03,0xD0,0x11,0x00,0x00,0x00,0x00,0x92,0x05,0xE0,0x22,0x00,0x00,0x00,0x00,0x94,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x42,0x00,0x00,0x00,0x00,0x14,0x0B,0x80,0x85,0x00,0x00,0x00,0x7E,0x14,0x16,0x80,0x0B,0x01,0x00,0x80,0x81,0x0B,0x2E,0x00,0x17,0x01,0x00,0xC0,0x00,0x0D,0x5C,0x00,0x2F,0x02,0x00,0xC0,0x00,0x35,0x2C,0x00,0x56,0x02,0x00,0x40,0x81,0x42,0x5C,0x00,0x2E,0x04,0x00,0xC0,0x86,0x83,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x19,0x00,0x59,0x01,0xBC,0x08,0x00,0x40,0x67,0x00,0xB2,0x02,0x68,0x09,0x00,0xC0,0x9A,0x07,0x72,0x05,0xD8,0x12,0x00,0x40,0x65,0xF8,0xE3,0x02,0xB0,0x11,0x00,0xA0,0x82,0x07,0x62,0x05,0x10,0x16,0x00,0x60,0x01,0xF8,0xC1,0x0A,0x20,0x18,0x00,0xA0,0x02,0xE8,0x80,0x15,0x20,0x20,0x00,0x60,0x01,0x74,0x80,0x2B,0x40,0x48,0x00,0xA0,0x00,0x7A,0x00,0x57,0x40,0x54,0x00,0x60,0x01,0x3D,0x00,0xAE,0x40,0x88,0x00,0xB0,0x80,0x1A,0x00,0x5C,0x41,0x80,0x00,0x50,0x41,0x1D,0x00,0xB8,0x62,0x80,0x00,0xB0,0x80,0x0E,0x00,0x70,0x7D,0x40,0x00,0x50,0x40,0x07,0x00,0xC0,0xFF,0x31,0x00,0xB0,0xA0,0x07,0x07,0x00,0x00,0x0E,0x00,0x58,0xD0,0xF3,0x18,0x06,0x00,0x00,0x00,0x28,0xA8,0x0D,0x60,0x09,0x00,0x00,0x00,0x58,0x54,0x42,0xC0,0x08,0x00,0x00,0x00,0xB0,0xAA,0x05,0x40,0x10,0x00,0x00,0x00,0x50,0x55,0x00,0x60,0x10,0x00,0x00,0x00,0xA0,0xAA,0x80,0x30,0xDC,0x00,0x00,0x00,0xC0,0x15,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x0B,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food1_61x98[] = {_I_food1_61x98_0};
-
-const uint8_t _I_food6_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0xC0,0x00,0x00,0x00,0x00,0x01,0x02,0x0F,0xA0,0x00,0x00,0x00,0x00,0x03,0x84,0x10,0xBC,0x03,0x00,0x00,0x00,0x05,0x44,0x20,0x02,0x02,0x00,0x00,0x00,0xC1,0x24,0x44,0x31,0x01,0x00,0x00,0x00,0xC2,0x24,0x4A,0xA1,0x00,0x00,0x00,0x00,0x02,0x24,0x84,0x45,0x00,0x00,0x00,0x00,0x04,0x2C,0x80,0x41,0x00,0x00,0x00,0x00,0x18,0xF8,0x80,0x23,0x00,0x00,0x00,0x00,0xE0,0x0E,0x81,0x1F,0x00,0x00,0x00,0x38,0x00,0x07,0x82,0x02,0x00,0x00,0x00,0xC8,0x01,0x0A,0x84,0x05,0x00,0x00,0x00,0x38,0x06,0x06,0x28,0x0B,0x00,0x00,0x00,0xC0,0x09,0x0B,0x50,0x15,0x00,0x00,0x00,0x00,0x12,0x17,0xB0,0x13,0x00,0x00,0x00,0x00,0x14,0x0B,0x60,0x25,0x00,0x00,0x00,0x00,0x14,0x17,0xC0,0x4B,0x00,0x00,0x00,0x00,0x14,0x0E,0x40,0x47,0x00,0x00,0x00,0x7E,0x14,0x16,0x80,0x8B,0x00,0x00,0x80,0x81,0x0B,0x2E,0x00,0x17,0x01,0x00,0xC0,0x00,0x0D,0x5C,0x00,0x0B,0x01,0x00,0xC0,0x00,0x35,0x2C,0x00,0x16,0x02,0x00,0x40,0x81,0x42,0x58,0x00,0x2E,0x04,0x00,0xC0,0x86,0x83,0xB8,0x00,0x5C,0x04,0x00,0xC0,0x19,0x00,0x71,0x01,0xBC,0x08,0x00,0x40,0x67,0x00,0xB2,0x00,0x58,0x09,0x00,0xC0,0x9A,0x07,0x72,0x01,0xB8,0x10,0x00,0x40,0x65,0xF8,0xE3,0x02,0x70,0x11,0x00,0xA0,0x82,0x07,0x62,0x05,0xF0,0x22,0x00,0x60,0x01,0xF8,0xC1,0x0A,0xA0,0x25,0x00,0xA0,0x02,0xE8,0xC0,0x15,0x60,0x4B,0x00,0x60,0x01,0x74,0x80,0x0B,0xC0,0x46,0x00,0xA0,0x00,0x7A,0x80,0x15,0x40,0x58,0x00,0x60,0x01,0x3D,0x00,0x2B,0x80,0x60,0x00,0xB0,0x80,0x1A,0x00,0x56,0x80,0x80,0x00,0x50,0x41,0x1D,0x00,0xAE,0x00,0x21,0x01,0xB0,0x80,0x0E,0x00,0x5C,0x01,0x51,0x01,0x50,0x40,0x07,0x00,0xB8,0x02,0x21,0x02,0xB0,0xA0,0x07,0x00,0x70,0x05,0x01,0x02,0x58,0xD0,0x03,0x00,0xE0,0x8A,0x01,0x02,0x28,0xA8,0x01,0x00,0xC0,0xF5,0x01,0x01,0x58,0xD4,0x01,0x00,0x00,0xFF,0xC7,0x00,0xB0,0xEA,0x00,0x07,0x00,0x00,0x38,0x00,0x50,0x75,0xF0,0x18,0x06,0x00,0x00,0x00,0xA0,0x7A,0x0C,0x60,0x09,0x00,0x00,0x00,0xC0,0x35,0x42,0xC0,0x08,0x00,0x00,0x00,0x00,0x9F,0x05,0x40,0x10,0x00,0x00,0x00,0x00,0x40,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xA0,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food6_61x98[] = {_I_food6_61x98_0};
-
-const uint8_t _I_food10_61x98_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x82,0x07,0x00,0x00,0x00,0x00,0x00,0x61,0x42,0x08,0x00,0x18,0x00,0x00,0x00,0x01,0x22,0x10,0x00,0x14,0x00,0x00,0x00,0x02,0x16,0x22,0x80,0x77,0x00,0x00,0x00,0x0C,0x14,0x25,0x40,0x40,0x00,0x00,0x00,0x70,0x13,0x42,0x20,0x26,0x00,0x00,0x00,0x80,0x11,0x40,0x20,0x14,0x00,0x00,0x00,0x00,0x78,0x40,0xA0,0x08,0x00,0x00,0x00,0x00,0x84,0xC0,0x20,0x08,0x00,0x00,0x00,0x00,0x02,0x41,0x61,0x04,0x00,0x00,0x00,0x00,0x05,0xC2,0xC2,0x03,0x00,0x00,0x00,0x00,0x03,0x94,0x05,0x00,0x00,0x00,0x38,0x80,0x05,0xA8,0x0A,0x00,0x00,0x00,0xC8,0x81,0x0B,0xD8,0x09,0x00,0x00,0x00,0x38,0x86,0x05,0xB0,0x12,0x00,0x00,0x00,0xC0,0x89,0x0B,0xE0,0x25,0x00,0x00,0x00,0x00,0x12,0x07,0xA0,0x23,0x00,0x00,0x00,0x00,0x14,0x0B,0xC0,0x45,0x00,0x00,0x00,0x00,0x14,0x17,0x80,0x8B,0x00,0x00,0x00,0x00,0x14,0x2E,0x80,0x85,0x00,0x00,0x00,0x7E,0x14,0x16,0x00,0x0B,0x01,0x00,0x80,0x81,0x0B,0x2C,0x00,0x17,0x02,0x00,0xC0,0x00,0x0D,0x5C,0x00,0x2E,0x02,0x00,0xC0,0x00,0x35,0xB8,0x00,0x5E,0x04,0x00,0x40,0x81,0x42,0x58,0x00,0xAC,0x04,0x00,0xC0,0x86,0x83,0xB8,0x00,0x5C,0x08,0x00,0xC0,0x19,0x00,0x71,0x01,0xB8,0x08,0x00,0x40,0x67,0x00,0xB2,0x02,0x78,0x11,0x00,0xC0,0x9A,0x07,0x62,0x05,0xD0,0x12,0x00,0x40,0x65,0xF8,0xE3,0x0A,0xB0,0x25,0x00,0xA0,0x82,0x07,0xC2,0x05,0x60,0x23,0x00,0x60,0x01,0xF8,0xC1,0x0A,0x20,0x2C,0x00,0xA0,0x02,0xE8,0x80,0x15,0x40,0x30,0x00,0x60,0x01,0x74,0x00,0x2B,0x40,0x40,0x00,0xA0,0x00,0x7A,0x00,0x57,0x80,0x90,0x00,0x60,0x01,0x3D,0x00,0xAE,0x80,0xA8,0x00,0xB0,0x80,0x1A,0x00,0x5C,0x81,0x10,0x01,0x50,0x41,0x1D,0x00,0xB8,0x82,0x00,0x01,0xB0,0x80,0x0E,0x00,0x70,0xC5,0x00,0x01,0x50,0x40,0x07,0x00,0xE0,0xFA,0x80,0x00,0xB0,0xA0,0x07,0x00,0x80,0xFF,0x63,0x00,0x58,0xD0,0x03,0x07,0x00,0x00,0x1C,0x00,0x28,0xA8,0xF1,0x18,0x06,0x00,0x00,0x00,0x58,0xD4,0x0D,0x60,0x09,0x00,0x00,0x00,0xB0,0x6A,0x42,0xC0,0x08,0x00,0x00,0x00,0x50,0xB5,0x05,0x40,0x10,0x00,0x00,0x00,0xA0,0x5A,0x00,0x60,0x10,0x00,0x00,0x00,0xC0,0xA5,0x80,0x30,0xDC,0x00,0x00,0x00,0x00,0x17,0x00,0x18,0x7E,0x01,0x00,0x00,0x00,0x08,0x04,0x8C,0x1F,0x01,0x00,0x00,0x00,0x24,0x00,0x46,0x07,0x01,0x00,0x00,0x00,0x02,0x00,0x07,0x83,0x00,0x00,0x00,0x00,0x21,0x80,0x03,0x61,0x00,0x00,0x00,0x80,0x00,0xC0,0xC3,0x11,0x00,0x00,0x00,0x40,0x02,0xE0,0xF1,0xEF,0x01,0x00,0x00,0x40,0x00,0xF0,0x38,0xF9,0x1F,0x00,0x00,0xA0,0x10,0x18,0x1C,0xBF,0x27,0x00,0x00,0x20,0x00,0x0E,0x88,0x5F,0x47,0x00,0x00,0x20,0x00,0x03,0xC8,0xAF,0x4B,0x00,0x00,0x20,0xC0,0x03,0xE6,0x57,0x47,0x00,0x00,0x40,0xF0,0xF1,0xF1,0xAB,0x47,0x00,0x00,0x40,0x7C,0xF8,0xF8,0xD5,0x21,0x00,0x00,0xE0,0x07,0xFC,0xFD,0xEA,0x20,0x00,0x00,0xE0,0x01,0xCC,0x5F,0x75,0x10,0x00,0x00,0xC0,0x00,0xCC,0xAF,0x1A,0x10,0x00,0x00,0x60,0x38,0xE4,0x57,0x0F,0x08,0x00,0x00,0x30,0x7C,0xE3,0xAA,0x03,0x04,0x00,0x00,0x30,0xF6,0x70,0xD5,0x00,0x03,0x00,0x00,0xE0,0x7B,0xA8,0x3A,0x80,0x00,0x00,0x00,0x00,0x18,0x54,0x0D,0x60,0x00,0x00,0x00,0x00,0x08,0xAA,0x03,0x10,0x00,0x00,0x00,0x00,0x90,0xF9,0x00,0x0C,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_food10_61x98[] = {_I_food10_61x98_0};
-
-const uint8_t _I_rightdown2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x1F,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xA2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x21,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_rightdown2_73x61[] = {_I_rightdown2_73x61_0};
-
-const uint8_t _I_black_upright2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFE,0xFF,0x1F,0xFC,0xF7,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0xF8,0xC7,0x00,0x00,0x00,0x00,0x80,0xFF,0x3F,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x80,0xFF,0x07,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0xE0,0xFF,0x00,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_upright2_73x61[] = {_I_black_upright2_73x61_0};
-
-const uint8_t _I_black_leftup1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xF9,0x0F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0xFF,0xFF,0x03,0x38,0x00,0x00,0x00,0x00,0x1E,0xF8,0xFF,0xFF,0x0F,0x7C,0x00,0x00,0x00,0x00,0x0C,0xE0,0xFF,0xFF,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_leftup1_73x61[] = {_I_black_leftup1_73x61_0};
-
-const uint8_t _I_black_upleft1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xFC,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_upleft1_73x61[] = {_I_black_upleft1_73x61_0};
-
-const uint8_t _I_black_down2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x8F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xDF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_down2_73x61[] = {_I_black_down2_73x61_0};
-
-const uint8_t _I_downleft3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x88,0x01,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x07,0x38,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0xE0,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x02,0x00,0x1E,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x02,0xF0,0x01,0x30,0x3C,0x00,0x00,0xC0,0xFF,0x03,0xFE,0x0F,0x00,0xCE,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x80,0x30,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x40,0x30,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x38,0x30,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x06,0x0C,0x00,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x02,0x38,0x00,0x00,0x00,0x00,0x00,0xE0,0x3F,0x00,0x82,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCE,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downleft3_73x61[] = {_I_downleft3_73x61_0};
-
-const uint8_t _I_down2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0xC7,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x28,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0x44,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x44,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x44,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x38,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_down2_73x61[] = {_I_down2_73x61_0};
-
-const uint8_t _I_black_downright2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x3F,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xC1,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xC3,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xE7,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFE,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downright2_73x61[] = {_I_black_downright2_73x61_0};
-
-const uint8_t _I_black_downleft2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x9F,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xE1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downleft2_73x61[] = {_I_black_downleft2_73x61_0};
-
-const uint8_t _I_up2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x38,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x44,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x44,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0x44,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x28,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0xC7,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_up2_73x61[] = {_I_up2_73x61_0};
-
-const uint8_t _I_right1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x0C,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x0C,0x02,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F,0x00,0x20,0x00,0x00,0xF0,0x03,0x40,0x00,0x00,0x38,0x00,0x10,0x00,0xFE,0x0F,0xFC,0x41,0x00,0xFC,0x07,0x00,0x10,0xE0,0x01,0x00,0x00,0x7E,0xC0,0x07,0x00,0x00,0x0C,0x1C,0x00,0x00,0x00,0x40,0xE0,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x20,0x98,0x03,0x00,0x00,0xE2,0x00,0x00,0x00,0x00,0x10,0xC6,0x01,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_right1_73x61[] = {_I_right1_73x61_0};
-
-const uint8_t _I_black_up1_73x61_0[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFF,0x1F,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xEF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xC7,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_up1_73x61[] = {_I_black_up1_73x61_0};
-
-const uint8_t _I_upright1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x01,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_upright1_73x61[] = {_I_upright1_73x61_0};
-
-const uint8_t _I_black_rightleft2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x07,0x40,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x7F,0xF8,0x01,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0xBE,0xFF,0xFF,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x0C,0xFC,0x3F,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_rightleft2_73x61[] = {_I_black_rightleft2_73x61_0};
-
-const uint8_t _I_black_right3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0xE0,0xFF,0xC0,0x1F,0x00,0x00,0xE0,0xFF,0x03,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0xFE,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFE,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x3C,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xE7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_right3_73x61[] = {_I_black_right3_73x61_0};
-
-const uint8_t _I_upleft2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x3F,0x80,0x01,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x0C,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0xFC,0xC1,0x1F,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x3C,0x41,0xE0,0x01,0x40,0x00,0x00,0x00,0x00,0x00,0x0C,0x41,0x00,0x0E,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x70,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x80,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_upleft2_73x61[] = {_I_upleft2_73x61_0};
-
-const uint8_t _I_black_downup3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downup3_73x61[] = {_I_black_downup3_73x61_0};
-
-const uint8_t _I_black_updown3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_updown3_73x61[] = {_I_black_updown3_73x61_0};
-
-const uint8_t _I_leftup2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x01,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x02,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x02,0x60,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xC0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_leftup2_73x61[] = {_I_leftup2_73x61_0};
-
-const uint8_t _I_leftdown2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_leftdown2_73x61[] = {_I_leftdown2_73x61_0};
-
-const uint8_t _I_downup1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xC3,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x24,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x18,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x10,0x00,0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x20,0x0F,0x00,0xE0,0x09,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x28,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downup1_73x61[] = {_I_downup1_73x61_0};
-
-const uint8_t _I_updown1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x28,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x0F,0x00,0xE0,0x09,0x00,0x00,0x00,0x00,0x00,0xC0,0x10,0x00,0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x30,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x48,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0x87,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_updown1_73x61[] = {_I_updown1_73x61_0};
-
-const uint8_t _I_rightup1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x19,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x80,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0B,0x00,0x00,0x00,0x00,0x00,0xE0,0x3F,0x03,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x10,0xC0,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x80,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x30,0x90,0x00,0x00,0x00,0x00,0x38,0x80,0x00,0x00,0x0C,0x60,0x00,0x00,0x00,0x00,0x44,0x60,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x84,0x18,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_rightup1_73x61[] = {_I_rightup1_73x61_0};
-
-const uint8_t _I_black_rightdown1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0xF0,0x07,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xF0,0x07,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0xE0,0x07,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF1,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_rightdown1_73x61[] = {_I_black_rightdown1_73x61_0};
-
-const uint8_t _I_downleft2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC2,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x84,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0xF8,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xFF,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xC0,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downleft2_73x61[] = {_I_downleft2_73x61_0};
-
-const uint8_t _I_downright1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x83,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x74,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downright1_73x61[] = {_I_downright1_73x61_0};
-
-const uint8_t _I_black_downright3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0xC0,0x7F,0x00,0x00,0xF0,0x0F,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0xE0,0x3F,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x1F,0xC0,0xFF,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x80,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xE7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downright3_73x61[] = {_I_black_downright3_73x61_0};
-
-const uint8_t _I_black_downleft3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0xF8,0x0F,0x00,0x00,0x00,0x00,0xE0,0x3F,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0xF0,0x1F,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0xFC,0x0F,0xE0,0xFF,0xFF,0xFF,0x01,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,0x07,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downleft3_73x61[] = {_I_black_downleft3_73x61_0};
-
-const uint8_t _I_rightleft1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0xC0,0x01,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x1A,0x30,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x22,0x0C,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0xC2,0x03,0x00,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x18,0x43,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x18,0x40,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x88,0x07,0x00,0x10,0x21,0x00,0x00,0x00,0x00,0x00,0x44,0x38,0x00,0xE0,0x30,0x00,0x00,0x00,0x00,0x00,0x44,0xC0,0x01,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x1E,0x80,0x7B,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x10,0x7E,0x60,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_rightleft1_73x61[] = {_I_rightleft1_73x61_0};
-
-const uint8_t _I_black_right2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF8,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xFC,0x07,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFC,0x03,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x01,0x7E,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x00,0x3C,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_right2_73x61[] = {_I_black_right2_73x61_0};
-
-const uint8_t _I_black_rightup2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_rightup2_73x61[] = {_I_black_rightup2_73x61_0};
-
-const uint8_t _I_black_downup2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xFF,0x1F,0x0E,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downup2_73x61[] = {_I_black_downup2_73x61_0};
-
-const uint8_t _I_black_updown2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xC0,0xE1,0xFF,0x3F,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_updown2_73x61[] = {_I_black_updown2_73x61_0};
-
-const uint8_t _I_black_left1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xC0,0xFF,0xFF,0xFF,0x7F,0xE0,0xFF,0xFF,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0xF0,0xFF,0x01,0x00,0x80,0xFF,0x3F,0x00,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0xC7,0x1F,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_left1_73x61[] = {_I_black_left1_73x61_0};
-
-const uint8_t _I_black_leftdown2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_leftdown2_73x61[] = {_I_black_leftdown2_73x61_0};
-
-const uint8_t _I_left1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x40,0x30,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x40,0x30,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x78,0x30,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x02,0x10,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x1C,0x00,0x00,0x02,0xC0,0x0F,0x00,0x00,0x04,0x00,0xE0,0x3F,0x00,0x82,0x3F,0xF0,0x7F,0x00,0x08,0x00,0x00,0xE0,0x03,0x7E,0x00,0x00,0x80,0x07,0x08,0x00,0x00,0xC0,0x07,0x02,0x00,0x00,0x00,0x38,0x30,0x00,0x00,0xC0,0x19,0x04,0x00,0x00,0x00,0xC0,0x40,0x00,0x00,0x80,0x63,0x08,0x00,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_left1_73x61[] = {_I_left1_73x61_0};
-
-const uint8_t _I_rightup2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x80,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x08,0x80,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x08,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x06,0x40,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x03,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_rightup2_73x61[] = {_I_rightup2_73x61_0};
-
-const uint8_t _I_black_rightdown2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,};
-const uint8_t *_I_black_rightdown2_73x61[] = {_I_black_rightdown2_73x61_0};
-
-const uint8_t _I_downup2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x83,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x10,0x9F,0x44,0xF2,0x11,0x00,0x00,0x00,0x00,0x00,0x20,0x0C,0x38,0x60,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x0E,0x00,0xE0,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0xCF,0x82,0xE6,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xCE,0x7C,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x45,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downup2_73x61[] = {_I_downup2_73x61_0};
-
-const uint8_t _I_updown2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x45,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCE,0x7C,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xCF,0x82,0xE6,0x03,0x00,0x00,0x00,0x00,0x00,0x40,0x0E,0x00,0xE0,0x04,0x00,0x00,0x00,0x00,0x00,0x20,0x0C,0x38,0x60,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x9F,0x44,0xF2,0x11,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x83,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_updown2_73x61[] = {_I_updown2_73x61_0};
-
-const uint8_t _I_right3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x20,0x06,0x00,0x00,0x40,0x40,0xE0,0x0F,0x00,0x00,0x20,0xF8,0x01,0x00,0x40,0x80,0x1F,0x70,0x00,0x00,0x10,0x00,0xFE,0xFF,0x3F,0x00,0x00,0x80,0x01,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x33,0x00,0x00,0x00,0x00,0x00,0x18,0x04,0x00,0xE2,0xC0,0x00,0x00,0x00,0x00,0x00,0x18,0x04,0x00,0x1E,0x00,0x03,0x00,0x00,0x00,0x00,0x18,0x3C,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xC0,0x0F,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x18,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xF3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_right3_73x61[] = {_I_right3_73x61_0};
-
-const uint8_t _I_downright2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x80,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x80,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x81,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3F,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFE,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x06,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downright2_73x61[] = {_I_downright2_73x61_0};
-
-const uint8_t _I_downleft1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x83,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x5C,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x02,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x03,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downleft1_73x61[] = {_I_downleft1_73x61_0};
-
-const uint8_t _I_black_rightup1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xC0,0x7F,0xFE,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFB,0x03,0x00,0x00,0x00,0x70,0x00,0xFF,0xFF,0xFF,0xF0,0x03,0x00,0x00,0x00,0xF8,0xC0,0xFF,0xFF,0x7F,0xE0,0x01,0x00,0x00,0x00,0xFC,0xF1,0xFF,0xFF,0x1F,0xC0,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_rightup1_73x61[] = {_I_black_rightup1_73x61_0};
-
-const uint8_t _I_black_right1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xF8,0xFF,0xFF,0x1F,0xF8,0xFF,0xFF,0xFF,0x0F,0x00,0xFC,0xFF,0x03,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0xFE,0x07,0x00,0x00,0x00,0xF0,0xFF,0x07,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0xE0,0x8F,0x03,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_right1_73x61[] = {_I_black_right1_73x61_0};
-
-const uint8_t _I_rightleft2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80,0x03,0x20,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x0C,0x58,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x30,0x44,0x00,0x00,0x00,0x00,0x00,0x3C,0x18,0x00,0xC0,0x43,0x00,0x00,0x00,0x00,0x00,0xC2,0x18,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x02,0x18,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x84,0x08,0x00,0xE0,0x11,0x00,0x00,0x00,0x00,0x00,0x0C,0x07,0x00,0x1C,0x22,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x80,0x03,0x22,0x00,0x00,0x00,0x00,0x00,0xDE,0x01,0x78,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x06,0x7E,0x08,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_rightleft2_73x61[] = {_I_rightleft2_73x61_0};
-
-const uint8_t _I_left2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x20,0x00,0x40,0x30,0x00,0x00,0x00,0x80,0x07,0x3E,0x10,0x00,0x40,0x30,0x00,0x00,0x00,0x70,0x00,0x40,0x10,0x00,0x78,0x30,0x00,0x00,0x00,0x0E,0x00,0x80,0x20,0x00,0x04,0x00,0x00,0x10,0xE0,0x01,0x00,0x00,0x21,0x00,0x02,0x10,0x00,0x10,0x1F,0x00,0x00,0x00,0x42,0x00,0xFE,0x0F,0x00,0xF8,0x00,0x00,0x00,0x00,0x44,0x00,0x1C,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x78,0x00,0xE0,0xFF,0x3F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8E,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_left2_73x61[] = {_I_left2_73x61_0};
-
-const uint8_t _I_black_left2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFC,0x7F,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xFF,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFE,0x01,0xFE,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0xFC,0x01,0xFC,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0xF8,0x01,0xF8,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0xF0,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_left2_73x61[] = {_I_black_left2_73x61_0};
-
-const uint8_t _I_black_downup1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC3,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE7,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFF,0x1F,0x06,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downup1_73x61[] = {_I_black_downup1_73x61_0};
-
-const uint8_t _I_black_updown1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x80,0xE1,0xFF,0x3F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x9F,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_updown1_73x61[] = {_I_black_updown1_73x61_0};
-
-const uint8_t _I_black_leftdown1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0xFE,0xFF,0x0F,0x00,0x00,0x00,0x00,0x80,0x3F,0xFC,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x83,0x1F,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_leftdown1_73x61[] = {_I_black_leftdown1_73x61_0};
-
-const uint8_t _I_downup3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x28,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x44,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0x44,0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x29,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xEF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downup3_73x61[] = {_I_downup3_73x61_0};
-
-const uint8_t _I_updown3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xEF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x29,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0x44,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x44,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x28,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x10,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_updown3_73x61[] = {_I_updown3_73x61_0};
-
-const uint8_t _I_black_leftup2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xFE,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_leftup2_73x61[] = {_I_black_leftup2_73x61_0};
-
-const uint8_t _I_black_upright1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_upright1_73x61[] = {_I_black_upright1_73x61_0};
-
-const uint8_t _I_rightdown1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x90,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x03,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x60,0x00,0xFC,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x7F,0x08,0x02,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x07,0x02,0x00,0x00,0x00,0x00,0x08,0x7C,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0xF0,0x83,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xC1,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xC7,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xC8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_rightdown1_73x61[] = {_I_rightdown1_73x61_0};
-
-const uint8_t _I_right2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0x00,0xC0,0x07,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x04,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x08,0x7C,0xE0,0x01,0x00,0x00,0x00,0x0C,0x02,0x00,0x08,0x02,0x00,0x0E,0x00,0x00,0x00,0x0C,0x02,0x00,0x04,0x01,0x00,0x70,0x00,0x00,0x00,0x0C,0x1E,0x00,0x84,0x00,0x00,0x80,0x07,0x08,0x00,0x00,0x20,0x00,0x42,0x00,0x00,0x00,0xF8,0x08,0x00,0x08,0x40,0x00,0x22,0x00,0x00,0x00,0x00,0x1F,0x00,0xF0,0x7F,0x00,0x1E,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xFC,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_right2_73x61[] = {_I_right2_73x61_0};
-
-const uint8_t _I_black_downleft1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x83,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xDF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_downleft1_73x61[] = {_I_black_downleft1_73x61_0};
-
-const uint8_t _I_down1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0xC7,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x28,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x44,0x08,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x3F,0x44,0xF8,0x05,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x44,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x44,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x38,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_down1_73x61[] = {_I_down1_73x61_0};
-
-const uint8_t _I_black_downright1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xEF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,};
-const uint8_t *_I_black_downright1_73x61[] = {_I_black_downright1_73x61_0};
-
-const uint8_t _I_up1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x38,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x44,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x44,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x40,0x3F,0x44,0xF8,0x05,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x44,0x08,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x28,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0xC7,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_up1_73x61[] = {_I_up1_73x61_0};
-
-const uint8_t _I_downright3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x11,0x00,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x60,0x10,0x00,0x00,0x10,0x06,0x00,0x00,0x00,0x00,0x1C,0xE0,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x02,0x00,0x07,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x02,0x00,0x78,0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x3C,0x0C,0x80,0x0F,0x40,0x40,0x00,0x00,0x00,0x00,0xC0,0x73,0x00,0xF0,0x7F,0xC0,0xFF,0x03,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x0C,0x01,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x0C,0x02,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0C,0x1C,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x1C,0x40,0x00,0xC0,0x3F,0x00,0x00,0x00,0x00,0x00,0xE0,0x41,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_downright3_73x61[] = {_I_downright3_73x61_0};
-
-const uint8_t _I_black_down1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x8F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xDF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0xFF,0x3F,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_down1_73x61[] = {_I_black_down1_73x61_0};
-
-const uint8_t _I_black_upleft2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xBE,0xFF,0xE0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x8C,0x7F,0x00,0xFE,0xFF,0x03,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0xF0,0xFF,0x07,0x00,0x00,0x00,0x00,0x80,0x1F,0x00,0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_upleft2_73x61[] = {_I_black_upleft2_73x61_0};
-
-const uint8_t _I_upleft1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x02,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x04,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_upleft1_73x61[] = {_I_upleft1_73x61_0};
-
-const uint8_t _I_black_rightleft1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x3C,0xE0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x7E,0xF8,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFC,0xF1,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xFC,0x80,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x7C,0x00,0xFC,0xFF,0xF7,0x01,0x00,0x00,0x00,0x00,0x3C,0x00,0xF0,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_rightleft1_73x61[] = {_I_black_rightleft1_73x61_0};
-
-const uint8_t _I_black_up2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xEF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xC7,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_up2_73x61[] = {_I_black_up2_73x61_0};
-
-const uint8_t _I_upright2_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x81,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x61,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0xF0,0x07,0x7F,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0F,0x04,0x79,0x00,0x00,0x00,0x00,0x00,0x02,0xE0,0x00,0x04,0x61,0x00,0x00,0x00,0x00,0x00,0x01,0x1C,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x80,0x80,0x03,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_upright2_73x61[] = {_I_upright2_73x61_0};
-
-const uint8_t _I_leftdown1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0xC0,0x03,0x01,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x3F,0x00,0x06,0x00,0x00,0x00,0x00,0x40,0x10,0xFE,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x40,0xE0,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3E,0x10,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0xC1,0x0F,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x83,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xE3,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x13,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_leftdown1_73x61[] = {_I_leftdown1_73x61_0};
-
-const uint8_t _I_left3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x0F,0x00,0x00,0xE0,0x0F,0x04,0x04,0x00,0x00,0xC0,0x08,0x00,0x00,0x1C,0xF0,0x03,0x04,0x00,0x00,0x3F,0x08,0x00,0x00,0x03,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x10,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x40,0x00,0x40,0x30,0x00,0x00,0x00,0x00,0x00,0x98,0x81,0x00,0x40,0x30,0x00,0x00,0x00,0x00,0x00,0x06,0x8E,0x00,0x78,0x30,0x00,0x00,0x00,0x00,0x80,0x01,0xF0,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x10,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0xE0,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x30,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x9F,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_left3_73x61[] = {_I_left3_73x61_0};
-
-const uint8_t _I_leftup1_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x98,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0x01,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xC0,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x03,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xA1,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x02,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x0C,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x30,0x00,0x00,0x01,0x1C,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0x06,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x18,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_leftup1_73x61[] = {_I_leftup1_73x61_0};
-
-const uint8_t _I_black_left3_73x61_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x00,0x00,0x00,0x0F,0x00,0x00,0xE0,0x0F,0xFC,0x1F,0x00,0x00,0xC0,0x1F,0x00,0x00,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xFE,0x01,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x9F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
-const uint8_t *_I_black_left3_73x61[] = {_I_black_left3_73x61_0};
-
const uint8_t _I_BadUsb_9x8_0[] = {0x01,0x01,0xBB,0x01,0xFE,0x00,0xFE,0x00,0xD6,0x00,0xD6,0x00,0x7C,0x00,0x38,0x00,};
const uint8_t *_I_BadUsb_9x8[] = {_I_BadUsb_9x8_0};
@@ -825,13 +429,6 @@ const uint8_t *_I_DolphinNice_96x59[] = {_I_DolphinNice_96x59_0};
const uint8_t _I_DolphinWait_61x59_0[] = {0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x70,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x06,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x0C,0x03,0x00,0x00,0x01,0x00,0x40,0x00,0xF2,0x05,0x00,0x00,0x01,0x00,0x40,0x00,0xF9,0x0B,0x00,0x80,0x03,0x00,0x00,0x00,0x3D,0x0F,0x00,0x80,0x02,0x00,0x00,0x80,0x3C,0x17,0x00,0x80,0x07,0x00,0x10,0x80,0xFC,0x17,0x00,0x80,0x07,0x00,0x10,0x80,0xFC,0x17,0x00,0x80,0x07,0x00,0x08,0x80,0xFC,0x17,0x80,0xFF,0x7F,0x00,0x08,0x80,0xF8,0x0B,0x60,0x00,0x80,0x01,0x00,0x40,0xF3,0x09,0x1C,0x00,0x00,0x06,0x04,0xA8,0x02,0x04,0x03,0x00,0x00,0x08,0x04,0x54,0x0D,0x83,0x00,0x00,0x00,0x08,0x00,0xAA,0xFF,0x00,0x00,0x00,0x00,0x10,0x02,0xD5,0x38,0x00,0x00,0x00,0x00,0x10,0x82,0x2A,0x40,0x00,0x00,0x00,0x00,0x10,0x00,0x15,0x80,0x00,0x00,0x00,0x00,0x10,0x82,0x0A,0x00,0x00,0x00,0xF8,0x3F,0x10,0x03,0x0D,0x00,0x00,0x00,0x07,0xC0,0x17,0x81,0x0A,0x00,0x00,0xE0,0x00,0x00,0x08,0x03,0x0D,0x04,0x00,0x1C,0x00,0x00,0x08,0x81,0x1A,0x04,0x00,0x03,0x00,0x00,0x08,0x03,0x15,0x04,0xC0,0x00,0x00,0x00,0x08,0x01,0x0A,0x08,0x30,0x00,0x00,0x00,0x04,0x03,0x00,0x30,0x0C,0x00,0x00,0x00,0x02,0x01,0x00,0xC0,0x03,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x00,0x00,0x54,0x20,0x00,0x05,0x00,0x00,0x00,0x80,0xAA,0x1A,0x00,0x02,0x00,0x00,0x00,0x50,0x55,0x07,0x00,0x05,0x00,0x00,0x00,0xAA,0xAA,0x01,0x00,0x0A,0x00,0x00,0x40,0x7D,0xD5,0x01,0x00,0x15,0xFE,0xBF,0xEA,0x83,0xBF,0x01,0x00,0xEA,0x01,0xE0,0x3F,0x00,0x58,0x01,0x00,0x3D,0x00,0x80,0x63,0x00,0xA0,0x01,0x00,0x07,0x00,0xC0,0x80,0x00,0x40,0x01,0x00,0x00,0x00,0x40,0xBC,0x01,0x80,0x01,0x00,0x00,0x00,0x70,0x84,0x03,0x00,0x02,0x00,0x00,0x00,0x4E,0xC4,0x03,0x00,0x04,0x00,0x00,0x80,0xC1,0xF1,0x07,0x00,0x08,0x00,0x01,0x78,0x00,0xFF,0x0F,0x00,0x10,0x00,0x00,0x07,0x00,0xF0,0x0F,0x00,0x10,0x00,0x81,0x00,0x00,0xE0,0x1F,0x00,0x20,0x00,0x62,0x00,0x00,0xE0,0x1F,0x00,0x40,0x00,0x75,0x00,0x00,0xC0,0xFF,0x01,0x9F,0x00,0x6A,0x00,0x00,0xC0,0x03,0xFE,0xA0,0x00,0xF5,0x00,0x00,0x70,0x01,0x00,0x40,0x01,0xEA,0x1F,0x00,0xBE,0x02,0x00,0x40,0x02,0xD5,0xFF,0xFF,0x5F,0x05,0x00,0x20,0x02,};
const uint8_t *_I_DolphinWait_61x59[] = {_I_DolphinWait_61x59_0};
-const Icon A_FX_Sitting_40x27 = {.width=40,.height=27,.frame_count=2,.frame_rate=10,.frames=_A_FX_Sitting_40x27};
-const Icon A_MDIB_32x32 = {.width=32,.height=32,.frame_count=4,.frame_rate=10,.frames=_A_MDIB_32x32};
-const Icon A_MDI_32x32 = {.width=32,.height=32,.frame_count=4,.frame_rate=10,.frames=_A_MDI_32x32};
-const Icon A_MDWLB_32x32 = {.width=32,.height=32,.frame_count=3,.frame_rate=10,.frames=_A_MDWLB_32x32};
-const Icon A_MDWL_32x32 = {.width=32,.height=32,.frame_count=3,.frame_rate=10,.frames=_A_MDWL_32x32};
-const Icon A_MDWRB_32x32 = {.width=32,.height=32,.frame_count=3,.frame_rate=10,.frames=_A_MDWRB_32x32};
-const Icon A_MDWR_32x32 = {.width=32,.height=32,.frame_count=3,.frame_rate=10,.frames=_A_MDWR_32x32};
const Icon A_WatchingTV_128x64 = {.width=128,.height=64,.frame_count=5,.frame_rate=10,.frames=_A_WatchingTV_128x64};
const Icon A_Wink_128x64 = {.width=128,.height=64,.frame_count=9,.frame_rate=10,.frames=_A_Wink_128x64};
const Icon I_dir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_dir_10px};
@@ -848,9 +445,6 @@ const Icon I_ButtonLeftSmall_3x5 = {.width=3,.height=5,.frame_count=1,.frame_rat
const Icon I_Warning_30x23 = {.width=30,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Warning_30x23};
const Icon I_ButtonRight_4x7 = {.width=4,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonRight_4x7};
const Icon I_ButtonCenter_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonCenter_7x7};
-const Icon I_FX_SittingB_40x27 = {.width=40,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_FX_SittingB_40x27};
-const Icon I_BigGames_24x24 = {.width=24,.height=24,.frame_count=1,.frame_rate=0,.frames=_I_BigGames_24x24};
-const Icon I_BigProfile_24x24 = {.width=24,.height=24,.frame_count=1,.frame_rate=0,.frames=_I_BigProfile_24x24};
const Icon I_DolphinOkay_41x43 = {.width=41,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_DolphinOkay_41x43};
const Icon I_DolphinFirstStart4_67x53 = {.width=67,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart4_67x53};
const Icon I_DolphinFirstStart2_59x51 = {.width=59,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart2_59x51};
@@ -861,22 +455,7 @@ const Icon I_DolphinFirstStart1_59x53 = {.width=59,.height=53,.frame_count=1,.fr
const Icon I_DolphinFirstStart8_56x51 = {.width=56,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart8_56x51};
const Icon I_DolphinFirstStart7_61x51 = {.width=61,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart7_61x51};
const Icon I_Flipper_young_80x60 = {.width=80,.height=60,.frame_count=1,.frame_rate=0,.frames=_I_Flipper_young_80x60};
-const Icon I_BigBurger_24x24 = {.width=24,.height=24,.frame_count=1,.frame_rate=0,.frames=_I_BigBurger_24x24};
-const Icon I_FX_Bang_32x6 = {.width=32,.height=6,.frame_count=1,.frame_rate=0,.frames=_I_FX_Bang_32x6};
const Icon I_DolphinFirstStart3_57x48 = {.width=57,.height=48,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart3_57x48};
-const Icon I_blackfish_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_blackfish_25x17};
-const Icon I_blacklid_36x27 = {.width=36,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_blacklid_36x27};
-const Icon I_skeleton_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_skeleton_25x17};
-const Icon I_letterB_10x10 = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_letterB_10x10};
-const Icon I_shit_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_shit_25x17};
-const Icon I_letterC_10x10 = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_letterC_10x10};
-const Icon I_active_plate_48x18 = {.width=48,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_active_plate_48x18};
-const Icon I_fish_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_fish_25x17};
-const Icon I_blackshit_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_blackshit_25x17};
-const Icon I_lid_36x27 = {.width=36,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_lid_36x27};
-const Icon I_blackskeleton_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_blackskeleton_25x17};
-const Icon I_letterA_10x10 = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_letterA_10x10};
-const Icon I_plate_42x19 = {.width=42,.height=19,.frame_count=1,.frame_rate=0,.frames=_I_plate_42x19};
const Icon I_PassportBottom_128x17 = {.width=128,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_PassportBottom_128x17};
const Icon I_DoorLeft_8x56 = {.width=8,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLeft_8x56};
const Icon I_DoorLocked_10x56 = {.width=10,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLocked_10x56};
@@ -926,15 +505,6 @@ const Icon A_U2F_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames
const Icon A_iButton_14 = {.width=14,.height=14,.frame_count=7,.frame_rate=3,.frames=_A_iButton_14};
const Icon I_Medium_chip_22x21 = {.width=22,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_Medium_chip_22x21};
const Icon I_EMV_Chip_14x11 = {.width=14,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_EMV_Chip_14x11};
-const Icon I_passport_happy1_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_happy1_43x45};
-const Icon I_passport_bad3_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_bad3_43x45};
-const Icon I_passport_okay2_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_okay2_43x45};
-const Icon I_passport_bad2_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_bad2_43x45};
-const Icon I_passport_okay3_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_okay3_43x45};
-const Icon I_passport_bad1_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_bad1_43x45};
-const Icon I_passport_happy3_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_happy3_43x45};
-const Icon I_passport_happy2_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_happy2_43x45};
-const Icon I_passport_okay1_43x45 = {.width=43,.height=45,.frame_count=1,.frame_rate=0,.frames=_I_passport_okay1_43x45};
const Icon I_Health_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Health_16x16};
const Icon I_FaceCharging_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceCharging_29x14};
const Icon I_BatteryBody_52x28 = {.width=52,.height=28,.frame_count=1,.frame_rate=0,.frames=_I_BatteryBody_52x28};
@@ -950,99 +520,6 @@ const Icon I_RFIDDolphinSend_97x61 = {.width=97,.height=61,.frame_count=1,.frame
const Icon I_RFIDDolphinReceive_97x61 = {.width=97,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinReceive_97x61};
const Icon I_SDQuestion_35x43 = {.width=35,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_SDQuestion_35x43};
const Icon I_SDError_43x35 = {.width=43,.height=35,.frame_count=1,.frame_rate=0,.frames=_I_SDError_43x35};
-const Icon I_Console_74x67_4 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_4};
-const Icon I_Console_74x67_5 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_5};
-const Icon I_Console_74x67_7 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_7};
-const Icon I_Console_74x67_6 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_6};
-const Icon I_Console_74x67_2 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_2};
-const Icon I_Console_74x67_3 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_3};
-const Icon I_Console_74x67_1 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_1};
-const Icon I_Console_74x67_0 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_0};
-const Icon I_Console_74x67_8 = {.width=74,.height=67,.frame_count=1,.frame_rate=0,.frames=_I_Console_74x67_8};
-const Icon I_food8_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food8_61x98};
-const Icon I_food5_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food5_61x98};
-const Icon I_food3_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food3_61x98};
-const Icon I_food9_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food9_61x98};
-const Icon I_food12_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food12_61x98};
-const Icon I_food4_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food4_61x98};
-const Icon I_food2_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food2_61x98};
-const Icon I_food7_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food7_61x98};
-const Icon I_food11_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food11_61x98};
-const Icon I_food1_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food1_61x98};
-const Icon I_food6_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food6_61x98};
-const Icon I_food10_61x98 = {.width=61,.height=98,.frame_count=1,.frame_rate=0,.frames=_I_food10_61x98};
-const Icon I_rightdown2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_rightdown2_73x61};
-const Icon I_black_upright2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_upright2_73x61};
-const Icon I_black_leftup1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_leftup1_73x61};
-const Icon I_black_upleft1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_upleft1_73x61};
-const Icon I_black_down2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_down2_73x61};
-const Icon I_downleft3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downleft3_73x61};
-const Icon I_down2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_down2_73x61};
-const Icon I_black_downright2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downright2_73x61};
-const Icon I_black_downleft2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downleft2_73x61};
-const Icon I_up2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_up2_73x61};
-const Icon I_right1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_right1_73x61};
-const Icon I_black_up1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_up1_73x61};
-const Icon I_upright1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_upright1_73x61};
-const Icon I_black_rightleft2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_rightleft2_73x61};
-const Icon I_black_right3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_right3_73x61};
-const Icon I_upleft2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_upleft2_73x61};
-const Icon I_black_downup3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downup3_73x61};
-const Icon I_black_updown3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_updown3_73x61};
-const Icon I_leftup2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_leftup2_73x61};
-const Icon I_leftdown2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_leftdown2_73x61};
-const Icon I_downup1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downup1_73x61};
-const Icon I_updown1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_updown1_73x61};
-const Icon I_rightup1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_rightup1_73x61};
-const Icon I_black_rightdown1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_rightdown1_73x61};
-const Icon I_downleft2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downleft2_73x61};
-const Icon I_downright1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downright1_73x61};
-const Icon I_black_downright3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downright3_73x61};
-const Icon I_black_downleft3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downleft3_73x61};
-const Icon I_rightleft1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_rightleft1_73x61};
-const Icon I_black_right2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_right2_73x61};
-const Icon I_black_rightup2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_rightup2_73x61};
-const Icon I_black_downup2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downup2_73x61};
-const Icon I_black_updown2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_updown2_73x61};
-const Icon I_black_left1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_left1_73x61};
-const Icon I_black_leftdown2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_leftdown2_73x61};
-const Icon I_left1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_left1_73x61};
-const Icon I_rightup2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_rightup2_73x61};
-const Icon I_black_rightdown2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_rightdown2_73x61};
-const Icon I_downup2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downup2_73x61};
-const Icon I_updown2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_updown2_73x61};
-const Icon I_right3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_right3_73x61};
-const Icon I_downright2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downright2_73x61};
-const Icon I_downleft1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downleft1_73x61};
-const Icon I_black_rightup1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_rightup1_73x61};
-const Icon I_black_right1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_right1_73x61};
-const Icon I_rightleft2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_rightleft2_73x61};
-const Icon I_left2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_left2_73x61};
-const Icon I_black_left2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_left2_73x61};
-const Icon I_black_downup1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downup1_73x61};
-const Icon I_black_updown1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_updown1_73x61};
-const Icon I_black_leftdown1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_leftdown1_73x61};
-const Icon I_downup3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downup3_73x61};
-const Icon I_updown3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_updown3_73x61};
-const Icon I_black_leftup2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_leftup2_73x61};
-const Icon I_black_upright1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_upright1_73x61};
-const Icon I_rightdown1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_rightdown1_73x61};
-const Icon I_right2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_right2_73x61};
-const Icon I_black_downleft1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downleft1_73x61};
-const Icon I_down1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_down1_73x61};
-const Icon I_black_downright1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_downright1_73x61};
-const Icon I_up1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_up1_73x61};
-const Icon I_downright3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_downright3_73x61};
-const Icon I_black_down1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_down1_73x61};
-const Icon I_black_upleft2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_upleft2_73x61};
-const Icon I_upleft1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_upleft1_73x61};
-const Icon I_black_rightleft1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_rightleft1_73x61};
-const Icon I_black_up2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_up2_73x61};
-const Icon I_upright2_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_upright2_73x61};
-const Icon I_leftdown1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_leftdown1_73x61};
-const Icon I_left3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_left3_73x61};
-const Icon I_leftup1_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_leftup1_73x61};
-const Icon I_black_left3_73x61 = {.width=73,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_black_left3_73x61};
const Icon I_BadUsb_9x8 = {.width=9,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_BadUsb_9x8};
const Icon I_PlaceholderR_30x13 = {.width=30,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_PlaceholderR_30x13};
const Icon I_Background_128x8 = {.width=128,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Background_128x8};
diff --git a/assets/compiled/assets_icons.h b/assets/compiled/assets_icons.h
index 5534ca71547..1ae1b19aa7d 100644
--- a/assets/compiled/assets_icons.h
+++ b/assets/compiled/assets_icons.h
@@ -1,13 +1,6 @@
#pragma once
#include
-extern const Icon A_FX_Sitting_40x27;
-extern const Icon A_MDIB_32x32;
-extern const Icon A_MDI_32x32;
-extern const Icon A_MDWLB_32x32;
-extern const Icon A_MDWL_32x32;
-extern const Icon A_MDWRB_32x32;
-extern const Icon A_MDWR_32x32;
extern const Icon A_WatchingTV_128x64;
extern const Icon A_Wink_128x64;
extern const Icon I_dir_10px;
@@ -24,9 +17,6 @@ extern const Icon I_ButtonLeftSmall_3x5;
extern const Icon I_Warning_30x23;
extern const Icon I_ButtonRight_4x7;
extern const Icon I_ButtonCenter_7x7;
-extern const Icon I_FX_SittingB_40x27;
-extern const Icon I_BigGames_24x24;
-extern const Icon I_BigProfile_24x24;
extern const Icon I_DolphinOkay_41x43;
extern const Icon I_DolphinFirstStart4_67x53;
extern const Icon I_DolphinFirstStart2_59x51;
@@ -37,22 +27,7 @@ extern const Icon I_DolphinFirstStart1_59x53;
extern const Icon I_DolphinFirstStart8_56x51;
extern const Icon I_DolphinFirstStart7_61x51;
extern const Icon I_Flipper_young_80x60;
-extern const Icon I_BigBurger_24x24;
-extern const Icon I_FX_Bang_32x6;
extern const Icon I_DolphinFirstStart3_57x48;
-extern const Icon I_blackfish_25x17;
-extern const Icon I_blacklid_36x27;
-extern const Icon I_skeleton_25x17;
-extern const Icon I_letterB_10x10;
-extern const Icon I_shit_25x17;
-extern const Icon I_letterC_10x10;
-extern const Icon I_active_plate_48x18;
-extern const Icon I_fish_25x17;
-extern const Icon I_blackshit_25x17;
-extern const Icon I_lid_36x27;
-extern const Icon I_blackskeleton_25x17;
-extern const Icon I_letterA_10x10;
-extern const Icon I_plate_42x19;
extern const Icon I_PassportBottom_128x17;
extern const Icon I_DoorLeft_8x56;
extern const Icon I_DoorLocked_10x56;
@@ -102,15 +77,6 @@ extern const Icon A_U2F_14;
extern const Icon A_iButton_14;
extern const Icon I_Medium_chip_22x21;
extern const Icon I_EMV_Chip_14x11;
-extern const Icon I_passport_happy1_43x45;
-extern const Icon I_passport_bad3_43x45;
-extern const Icon I_passport_okay2_43x45;
-extern const Icon I_passport_bad2_43x45;
-extern const Icon I_passport_okay3_43x45;
-extern const Icon I_passport_bad1_43x45;
-extern const Icon I_passport_happy3_43x45;
-extern const Icon I_passport_happy2_43x45;
-extern const Icon I_passport_okay1_43x45;
extern const Icon I_Health_16x16;
extern const Icon I_FaceCharging_29x14;
extern const Icon I_BatteryBody_52x28;
@@ -126,99 +92,6 @@ extern const Icon I_RFIDDolphinSend_97x61;
extern const Icon I_RFIDDolphinReceive_97x61;
extern const Icon I_SDQuestion_35x43;
extern const Icon I_SDError_43x35;
-extern const Icon I_Console_74x67_4;
-extern const Icon I_Console_74x67_5;
-extern const Icon I_Console_74x67_7;
-extern const Icon I_Console_74x67_6;
-extern const Icon I_Console_74x67_2;
-extern const Icon I_Console_74x67_3;
-extern const Icon I_Console_74x67_1;
-extern const Icon I_Console_74x67_0;
-extern const Icon I_Console_74x67_8;
-extern const Icon I_food8_61x98;
-extern const Icon I_food5_61x98;
-extern const Icon I_food3_61x98;
-extern const Icon I_food9_61x98;
-extern const Icon I_food12_61x98;
-extern const Icon I_food4_61x98;
-extern const Icon I_food2_61x98;
-extern const Icon I_food7_61x98;
-extern const Icon I_food11_61x98;
-extern const Icon I_food1_61x98;
-extern const Icon I_food6_61x98;
-extern const Icon I_food10_61x98;
-extern const Icon I_rightdown2_73x61;
-extern const Icon I_black_upright2_73x61;
-extern const Icon I_black_leftup1_73x61;
-extern const Icon I_black_upleft1_73x61;
-extern const Icon I_black_down2_73x61;
-extern const Icon I_downleft3_73x61;
-extern const Icon I_down2_73x61;
-extern const Icon I_black_downright2_73x61;
-extern const Icon I_black_downleft2_73x61;
-extern const Icon I_up2_73x61;
-extern const Icon I_right1_73x61;
-extern const Icon I_black_up1_73x61;
-extern const Icon I_upright1_73x61;
-extern const Icon I_black_rightleft2_73x61;
-extern const Icon I_black_right3_73x61;
-extern const Icon I_upleft2_73x61;
-extern const Icon I_black_downup3_73x61;
-extern const Icon I_black_updown3_73x61;
-extern const Icon I_leftup2_73x61;
-extern const Icon I_leftdown2_73x61;
-extern const Icon I_downup1_73x61;
-extern const Icon I_updown1_73x61;
-extern const Icon I_rightup1_73x61;
-extern const Icon I_black_rightdown1_73x61;
-extern const Icon I_downleft2_73x61;
-extern const Icon I_downright1_73x61;
-extern const Icon I_black_downright3_73x61;
-extern const Icon I_black_downleft3_73x61;
-extern const Icon I_rightleft1_73x61;
-extern const Icon I_black_right2_73x61;
-extern const Icon I_black_rightup2_73x61;
-extern const Icon I_black_downup2_73x61;
-extern const Icon I_black_updown2_73x61;
-extern const Icon I_black_left1_73x61;
-extern const Icon I_black_leftdown2_73x61;
-extern const Icon I_left1_73x61;
-extern const Icon I_rightup2_73x61;
-extern const Icon I_black_rightdown2_73x61;
-extern const Icon I_downup2_73x61;
-extern const Icon I_updown2_73x61;
-extern const Icon I_right3_73x61;
-extern const Icon I_downright2_73x61;
-extern const Icon I_downleft1_73x61;
-extern const Icon I_black_rightup1_73x61;
-extern const Icon I_black_right1_73x61;
-extern const Icon I_rightleft2_73x61;
-extern const Icon I_left2_73x61;
-extern const Icon I_black_left2_73x61;
-extern const Icon I_black_downup1_73x61;
-extern const Icon I_black_updown1_73x61;
-extern const Icon I_black_leftdown1_73x61;
-extern const Icon I_downup3_73x61;
-extern const Icon I_updown3_73x61;
-extern const Icon I_black_leftup2_73x61;
-extern const Icon I_black_upright1_73x61;
-extern const Icon I_rightdown1_73x61;
-extern const Icon I_right2_73x61;
-extern const Icon I_black_downleft1_73x61;
-extern const Icon I_down1_73x61;
-extern const Icon I_black_downright1_73x61;
-extern const Icon I_up1_73x61;
-extern const Icon I_downright3_73x61;
-extern const Icon I_black_down1_73x61;
-extern const Icon I_black_upleft2_73x61;
-extern const Icon I_upleft1_73x61;
-extern const Icon I_black_rightleft1_73x61;
-extern const Icon I_black_up2_73x61;
-extern const Icon I_upright2_73x61;
-extern const Icon I_leftdown1_73x61;
-extern const Icon I_left3_73x61;
-extern const Icon I_leftup1_73x61;
-extern const Icon I_black_left3_73x61;
extern const Icon I_BadUsb_9x8;
extern const Icon I_PlaceholderR_30x13;
extern const Icon I_Background_128x8;
diff --git a/assets/icons/Animations/FX_Sitting_40x27/frame_0.png b/assets/icons/Animations/FX_Sitting_40x27/frame_0.png
deleted file mode 100644
index 22e3d38dbe9..00000000000
Binary files a/assets/icons/Animations/FX_Sitting_40x27/frame_0.png and /dev/null differ
diff --git a/assets/icons/Animations/FX_Sitting_40x27/frame_1.png b/assets/icons/Animations/FX_Sitting_40x27/frame_1.png
deleted file mode 100644
index 2438be9eefe..00000000000
Binary files a/assets/icons/Animations/FX_Sitting_40x27/frame_1.png and /dev/null differ
diff --git a/assets/icons/Animations/FX_Sitting_40x27/frame_rate b/assets/icons/Animations/FX_Sitting_40x27/frame_rate
deleted file mode 100644
index 9a037142aa3..00000000000
--- a/assets/icons/Animations/FX_Sitting_40x27/frame_rate
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/assets/icons/Animations/MDIB_32x32/frame_0.png b/assets/icons/Animations/MDIB_32x32/frame_0.png
deleted file mode 100644
index c8297922755..00000000000
Binary files a/assets/icons/Animations/MDIB_32x32/frame_0.png and /dev/null differ
diff --git a/assets/icons/Animations/MDIB_32x32/frame_1.png b/assets/icons/Animations/MDIB_32x32/frame_1.png
deleted file mode 100644
index 5ce5a67d19a..00000000000
Binary files a/assets/icons/Animations/MDIB_32x32/frame_1.png and /dev/null differ
diff --git a/assets/icons/Animations/MDIB_32x32/frame_2.png b/assets/icons/Animations/MDIB_32x32/frame_2.png
deleted file mode 100644
index 5ce5a67d19a..00000000000
Binary files a/assets/icons/Animations/MDIB_32x32/frame_2.png and /dev/null differ
diff --git a/assets/icons/Animations/MDIB_32x32/frame_3.png b/assets/icons/Animations/MDIB_32x32/frame_3.png
deleted file mode 100644
index b5def708a48..00000000000
Binary files a/assets/icons/Animations/MDIB_32x32/frame_3.png and /dev/null differ
diff --git a/assets/icons/Animations/MDIB_32x32/frame_rate b/assets/icons/Animations/MDIB_32x32/frame_rate
deleted file mode 100644
index 9a037142aa3..00000000000
--- a/assets/icons/Animations/MDIB_32x32/frame_rate
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/assets/icons/Animations/MDI_32x32/frame_0.png b/assets/icons/Animations/MDI_32x32/frame_0.png
deleted file mode 100644
index b71622f688e..00000000000
Binary files a/assets/icons/Animations/MDI_32x32/frame_0.png and /dev/null differ
diff --git a/assets/icons/Animations/MDI_32x32/frame_1.png b/assets/icons/Animations/MDI_32x32/frame_1.png
deleted file mode 100644
index f58938a9475..00000000000
Binary files a/assets/icons/Animations/MDI_32x32/frame_1.png and /dev/null differ
diff --git a/assets/icons/Animations/MDI_32x32/frame_2.png b/assets/icons/Animations/MDI_32x32/frame_2.png
deleted file mode 100644
index f58938a9475..00000000000
Binary files a/assets/icons/Animations/MDI_32x32/frame_2.png and /dev/null differ
diff --git a/assets/icons/Animations/MDI_32x32/frame_3.png b/assets/icons/Animations/MDI_32x32/frame_3.png
deleted file mode 100644
index 24fbf7774a0..00000000000
Binary files a/assets/icons/Animations/MDI_32x32/frame_3.png and /dev/null differ
diff --git a/assets/icons/Animations/MDI_32x32/frame_rate b/assets/icons/Animations/MDI_32x32/frame_rate
deleted file mode 100644
index 9a037142aa3..00000000000
--- a/assets/icons/Animations/MDI_32x32/frame_rate
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/assets/icons/Animations/MDWLB_32x32/frame_1.png b/assets/icons/Animations/MDWLB_32x32/frame_1.png
deleted file mode 100644
index e26b3a53a37..00000000000
Binary files a/assets/icons/Animations/MDWLB_32x32/frame_1.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWLB_32x32/frame_2.png b/assets/icons/Animations/MDWLB_32x32/frame_2.png
deleted file mode 100644
index fa427cae46e..00000000000
Binary files a/assets/icons/Animations/MDWLB_32x32/frame_2.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWLB_32x32/frame_3.png b/assets/icons/Animations/MDWLB_32x32/frame_3.png
deleted file mode 100644
index ad269276343..00000000000
Binary files a/assets/icons/Animations/MDWLB_32x32/frame_3.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWLB_32x32/frame_rate b/assets/icons/Animations/MDWLB_32x32/frame_rate
deleted file mode 100644
index 9a037142aa3..00000000000
--- a/assets/icons/Animations/MDWLB_32x32/frame_rate
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/assets/icons/Animations/MDWL_32x32/frame_1.png b/assets/icons/Animations/MDWL_32x32/frame_1.png
deleted file mode 100644
index 4b0bd151494..00000000000
Binary files a/assets/icons/Animations/MDWL_32x32/frame_1.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWL_32x32/frame_2.png b/assets/icons/Animations/MDWL_32x32/frame_2.png
deleted file mode 100644
index fe8e32c335a..00000000000
Binary files a/assets/icons/Animations/MDWL_32x32/frame_2.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWL_32x32/frame_3.png b/assets/icons/Animations/MDWL_32x32/frame_3.png
deleted file mode 100644
index c63a48fe028..00000000000
Binary files a/assets/icons/Animations/MDWL_32x32/frame_3.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWL_32x32/frame_rate b/assets/icons/Animations/MDWL_32x32/frame_rate
deleted file mode 100644
index 9a037142aa3..00000000000
--- a/assets/icons/Animations/MDWL_32x32/frame_rate
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/assets/icons/Animations/MDWRB_32x32/frame_1.png b/assets/icons/Animations/MDWRB_32x32/frame_1.png
deleted file mode 100644
index be2244438e3..00000000000
Binary files a/assets/icons/Animations/MDWRB_32x32/frame_1.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWRB_32x32/frame_2.png b/assets/icons/Animations/MDWRB_32x32/frame_2.png
deleted file mode 100644
index 3b70ca8914e..00000000000
Binary files a/assets/icons/Animations/MDWRB_32x32/frame_2.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWRB_32x32/frame_3.png b/assets/icons/Animations/MDWRB_32x32/frame_3.png
deleted file mode 100644
index 444dceae586..00000000000
Binary files a/assets/icons/Animations/MDWRB_32x32/frame_3.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWRB_32x32/frame_rate b/assets/icons/Animations/MDWRB_32x32/frame_rate
deleted file mode 100644
index 9a037142aa3..00000000000
--- a/assets/icons/Animations/MDWRB_32x32/frame_rate
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/assets/icons/Animations/MDWR_32x32/frame_1.png b/assets/icons/Animations/MDWR_32x32/frame_1.png
deleted file mode 100644
index d2e355a1fb8..00000000000
Binary files a/assets/icons/Animations/MDWR_32x32/frame_1.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWR_32x32/frame_2.png b/assets/icons/Animations/MDWR_32x32/frame_2.png
deleted file mode 100644
index 522f1217976..00000000000
Binary files a/assets/icons/Animations/MDWR_32x32/frame_2.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWR_32x32/frame_3.png b/assets/icons/Animations/MDWR_32x32/frame_3.png
deleted file mode 100644
index b01e463eb9d..00000000000
Binary files a/assets/icons/Animations/MDWR_32x32/frame_3.png and /dev/null differ
diff --git a/assets/icons/Animations/MDWR_32x32/frame_rate b/assets/icons/Animations/MDWR_32x32/frame_rate
deleted file mode 100644
index 9a037142aa3..00000000000
--- a/assets/icons/Animations/MDWR_32x32/frame_rate
+++ /dev/null
@@ -1 +0,0 @@
-10
\ No newline at end of file
diff --git a/assets/icons/Dolphin/BigBurger_24x24.png b/assets/icons/Dolphin/BigBurger_24x24.png
deleted file mode 100644
index 5533147ced1..00000000000
Binary files a/assets/icons/Dolphin/BigBurger_24x24.png and /dev/null differ
diff --git a/assets/icons/Dolphin/BigGames_24x24.png b/assets/icons/Dolphin/BigGames_24x24.png
deleted file mode 100644
index a6e096f4b95..00000000000
Binary files a/assets/icons/Dolphin/BigGames_24x24.png and /dev/null differ
diff --git a/assets/icons/Dolphin/BigProfile_24x24.png b/assets/icons/Dolphin/BigProfile_24x24.png
deleted file mode 100644
index 61b796e22fa..00000000000
Binary files a/assets/icons/Dolphin/BigProfile_24x24.png and /dev/null differ
diff --git a/assets/icons/Dolphin/FX_Bang_32x6.png b/assets/icons/Dolphin/FX_Bang_32x6.png
deleted file mode 100644
index d842e48f2ab..00000000000
Binary files a/assets/icons/Dolphin/FX_Bang_32x6.png and /dev/null differ
diff --git a/assets/icons/Dolphin/FX_SittingB_40x27.png b/assets/icons/Dolphin/FX_SittingB_40x27.png
deleted file mode 100644
index e95651119a4..00000000000
Binary files a/assets/icons/Dolphin/FX_SittingB_40x27.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/active_plate_48x18.png b/assets/icons/FoodMinigame/active_plate_48x18.png
deleted file mode 100644
index f1e2b84c4dd..00000000000
Binary files a/assets/icons/FoodMinigame/active_plate_48x18.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/blackfish_25x17.png b/assets/icons/FoodMinigame/blackfish_25x17.png
deleted file mode 100644
index f8cc252292d..00000000000
Binary files a/assets/icons/FoodMinigame/blackfish_25x17.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/blacklid_36x27.png b/assets/icons/FoodMinigame/blacklid_36x27.png
deleted file mode 100644
index a4407e8d1dd..00000000000
Binary files a/assets/icons/FoodMinigame/blacklid_36x27.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/blackshit_25x17.png b/assets/icons/FoodMinigame/blackshit_25x17.png
deleted file mode 100644
index 837c81b5415..00000000000
Binary files a/assets/icons/FoodMinigame/blackshit_25x17.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/blackskeleton_25x17.png b/assets/icons/FoodMinigame/blackskeleton_25x17.png
deleted file mode 100644
index c55ee79e7c7..00000000000
Binary files a/assets/icons/FoodMinigame/blackskeleton_25x17.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/fish_25x17.png b/assets/icons/FoodMinigame/fish_25x17.png
deleted file mode 100644
index dcfcba34a59..00000000000
Binary files a/assets/icons/FoodMinigame/fish_25x17.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/letterA_10x10.png b/assets/icons/FoodMinigame/letterA_10x10.png
deleted file mode 100644
index ccf79edbbe3..00000000000
Binary files a/assets/icons/FoodMinigame/letterA_10x10.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/letterB_10x10.png b/assets/icons/FoodMinigame/letterB_10x10.png
deleted file mode 100644
index 2dee98f56d6..00000000000
Binary files a/assets/icons/FoodMinigame/letterB_10x10.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/letterC_10x10.png b/assets/icons/FoodMinigame/letterC_10x10.png
deleted file mode 100644
index 9d8256e89bc..00000000000
Binary files a/assets/icons/FoodMinigame/letterC_10x10.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/lid_36x27.png b/assets/icons/FoodMinigame/lid_36x27.png
deleted file mode 100644
index c5855b2d7ce..00000000000
Binary files a/assets/icons/FoodMinigame/lid_36x27.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/plate_42x19.png b/assets/icons/FoodMinigame/plate_42x19.png
deleted file mode 100644
index 3de05e1bb14..00000000000
Binary files a/assets/icons/FoodMinigame/plate_42x19.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/shit_25x17.png b/assets/icons/FoodMinigame/shit_25x17.png
deleted file mode 100644
index 2323a818158..00000000000
Binary files a/assets/icons/FoodMinigame/shit_25x17.png and /dev/null differ
diff --git a/assets/icons/FoodMinigame/skeleton_25x17.png b/assets/icons/FoodMinigame/skeleton_25x17.png
deleted file mode 100644
index 9dcf45bf762..00000000000
Binary files a/assets/icons/FoodMinigame/skeleton_25x17.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_bad1_43x45.png b/assets/icons/Passport/passport_bad1_43x45.png
deleted file mode 100644
index 74301204682..00000000000
Binary files a/assets/icons/Passport/passport_bad1_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_bad2_43x45.png b/assets/icons/Passport/passport_bad2_43x45.png
deleted file mode 100644
index de88b83984f..00000000000
Binary files a/assets/icons/Passport/passport_bad2_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_bad3_43x45.png b/assets/icons/Passport/passport_bad3_43x45.png
deleted file mode 100644
index e083882acf3..00000000000
Binary files a/assets/icons/Passport/passport_bad3_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_happy1_43x45.png b/assets/icons/Passport/passport_happy1_43x45.png
deleted file mode 100644
index 9f02523fc89..00000000000
Binary files a/assets/icons/Passport/passport_happy1_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_happy2_43x45.png b/assets/icons/Passport/passport_happy2_43x45.png
deleted file mode 100644
index 28ea8d956a7..00000000000
Binary files a/assets/icons/Passport/passport_happy2_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_happy3_43x45.png b/assets/icons/Passport/passport_happy3_43x45.png
deleted file mode 100644
index 724535eca4b..00000000000
Binary files a/assets/icons/Passport/passport_happy3_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_okay1_43x45.png b/assets/icons/Passport/passport_okay1_43x45.png
deleted file mode 100644
index 176d104e41f..00000000000
Binary files a/assets/icons/Passport/passport_okay1_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_okay2_43x45.png b/assets/icons/Passport/passport_okay2_43x45.png
deleted file mode 100644
index 11ca3780204..00000000000
Binary files a/assets/icons/Passport/passport_okay2_43x45.png and /dev/null differ
diff --git a/assets/icons/Passport/passport_okay3_43x45.png b/assets/icons/Passport/passport_okay3_43x45.png
deleted file mode 100644
index 62d1e273efb..00000000000
Binary files a/assets/icons/Passport/passport_okay3_43x45.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_0.png b/assets/icons/Scenes/Console_74x67/Console_74x67_0.png
deleted file mode 100644
index 0ba82f443f8..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_0.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_1.png b/assets/icons/Scenes/Console_74x67/Console_74x67_1.png
deleted file mode 100644
index 19b113c8c84..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_1.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_2.png b/assets/icons/Scenes/Console_74x67/Console_74x67_2.png
deleted file mode 100644
index 80624045c72..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_2.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_3.png b/assets/icons/Scenes/Console_74x67/Console_74x67_3.png
deleted file mode 100644
index 8eb5ce14cb3..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_3.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_4.png b/assets/icons/Scenes/Console_74x67/Console_74x67_4.png
deleted file mode 100644
index a555ec7e598..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_4.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_5.png b/assets/icons/Scenes/Console_74x67/Console_74x67_5.png
deleted file mode 100644
index 1032717f34d..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_5.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_6.png b/assets/icons/Scenes/Console_74x67/Console_74x67_6.png
deleted file mode 100644
index 744480fab7c..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_6.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_7.png b/assets/icons/Scenes/Console_74x67/Console_74x67_7.png
deleted file mode 100644
index 1984654b532..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_7.png and /dev/null differ
diff --git a/assets/icons/Scenes/Console_74x67/Console_74x67_8.png b/assets/icons/Scenes/Console_74x67/Console_74x67_8.png
deleted file mode 100644
index f82da3978a7..00000000000
Binary files a/assets/icons/Scenes/Console_74x67/Console_74x67_8.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food10_61x98.png b/assets/icons/Scenes/Food/food10_61x98.png
deleted file mode 100644
index 8ed4c760ffe..00000000000
Binary files a/assets/icons/Scenes/Food/food10_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food11_61x98.png b/assets/icons/Scenes/Food/food11_61x98.png
deleted file mode 100644
index cf6365e728a..00000000000
Binary files a/assets/icons/Scenes/Food/food11_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food12_61x98.png b/assets/icons/Scenes/Food/food12_61x98.png
deleted file mode 100644
index 170715933a7..00000000000
Binary files a/assets/icons/Scenes/Food/food12_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food1_61x98.png b/assets/icons/Scenes/Food/food1_61x98.png
deleted file mode 100644
index 3004f879fdf..00000000000
Binary files a/assets/icons/Scenes/Food/food1_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food2_61x98.png b/assets/icons/Scenes/Food/food2_61x98.png
deleted file mode 100644
index 5f44d97f803..00000000000
Binary files a/assets/icons/Scenes/Food/food2_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food3_61x98.png b/assets/icons/Scenes/Food/food3_61x98.png
deleted file mode 100644
index 9e582f4635a..00000000000
Binary files a/assets/icons/Scenes/Food/food3_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food4_61x98.png b/assets/icons/Scenes/Food/food4_61x98.png
deleted file mode 100644
index 2f3658615af..00000000000
Binary files a/assets/icons/Scenes/Food/food4_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food5_61x98.png b/assets/icons/Scenes/Food/food5_61x98.png
deleted file mode 100644
index bab5324bd7b..00000000000
Binary files a/assets/icons/Scenes/Food/food5_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food6_61x98.png b/assets/icons/Scenes/Food/food6_61x98.png
deleted file mode 100644
index 8a483a725ee..00000000000
Binary files a/assets/icons/Scenes/Food/food6_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food7_61x98.png b/assets/icons/Scenes/Food/food7_61x98.png
deleted file mode 100644
index 397c9b0ace3..00000000000
Binary files a/assets/icons/Scenes/Food/food7_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food8_61x98.png b/assets/icons/Scenes/Food/food8_61x98.png
deleted file mode 100644
index c75bf61704f..00000000000
Binary files a/assets/icons/Scenes/Food/food8_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Food/food9_61x98.png b/assets/icons/Scenes/Food/food9_61x98.png
deleted file mode 100644
index a000aaf6c09..00000000000
Binary files a/assets/icons/Scenes/Food/food9_61x98.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_down1_73x61.png b/assets/icons/Scenes/Swimming/black_down1_73x61.png
deleted file mode 100644
index 60f3587fd03..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_down1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_down2_73x61.png b/assets/icons/Scenes/Swimming/black_down2_73x61.png
deleted file mode 100644
index 8b60d7078fc..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_down2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downleft1_73x61.png b/assets/icons/Scenes/Swimming/black_downleft1_73x61.png
deleted file mode 100644
index a1eae0685a8..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downleft1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downleft2_73x61.png b/assets/icons/Scenes/Swimming/black_downleft2_73x61.png
deleted file mode 100644
index ae70f9c82e4..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downleft2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downleft3_73x61.png b/assets/icons/Scenes/Swimming/black_downleft3_73x61.png
deleted file mode 100644
index d7255047260..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downleft3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downright1_73x61.png b/assets/icons/Scenes/Swimming/black_downright1_73x61.png
deleted file mode 100644
index f3259ff7007..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downright1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downright2_73x61.png b/assets/icons/Scenes/Swimming/black_downright2_73x61.png
deleted file mode 100644
index 72817ec5783..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downright2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downright3_73x61.png b/assets/icons/Scenes/Swimming/black_downright3_73x61.png
deleted file mode 100644
index 503c7c98f77..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downright3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downup1_73x61.png b/assets/icons/Scenes/Swimming/black_downup1_73x61.png
deleted file mode 100644
index 906a2dac889..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downup1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downup2_73x61.png b/assets/icons/Scenes/Swimming/black_downup2_73x61.png
deleted file mode 100644
index 1a60a8c020f..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downup2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_downup3_73x61.png b/assets/icons/Scenes/Swimming/black_downup3_73x61.png
deleted file mode 100644
index c3b3f5213f1..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_downup3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_left1_73x61.png b/assets/icons/Scenes/Swimming/black_left1_73x61.png
deleted file mode 100644
index a2053ac2407..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_left1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_left2_73x61.png b/assets/icons/Scenes/Swimming/black_left2_73x61.png
deleted file mode 100644
index 0871f502e72..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_left2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_left3_73x61.png b/assets/icons/Scenes/Swimming/black_left3_73x61.png
deleted file mode 100644
index 770b9d58b3d..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_left3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_leftdown1_73x61.png b/assets/icons/Scenes/Swimming/black_leftdown1_73x61.png
deleted file mode 100644
index 7d62ee65559..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_leftdown1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_leftdown2_73x61.png b/assets/icons/Scenes/Swimming/black_leftdown2_73x61.png
deleted file mode 100644
index e1d242c02e5..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_leftdown2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_leftup1_73x61.png b/assets/icons/Scenes/Swimming/black_leftup1_73x61.png
deleted file mode 100644
index 120b62ce030..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_leftup1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_leftup2_73x61.png b/assets/icons/Scenes/Swimming/black_leftup2_73x61.png
deleted file mode 100644
index e61961164ef..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_leftup2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_right1_73x61.png b/assets/icons/Scenes/Swimming/black_right1_73x61.png
deleted file mode 100644
index 274edda30ee..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_right1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_right2_73x61.png b/assets/icons/Scenes/Swimming/black_right2_73x61.png
deleted file mode 100644
index 07077e5399e..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_right2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_right3_73x61.png b/assets/icons/Scenes/Swimming/black_right3_73x61.png
deleted file mode 100644
index 8f9bdeb27be..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_right3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_rightdown1_73x61.png b/assets/icons/Scenes/Swimming/black_rightdown1_73x61.png
deleted file mode 100644
index ea0dcb6c286..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_rightdown1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_rightdown2_73x61.png b/assets/icons/Scenes/Swimming/black_rightdown2_73x61.png
deleted file mode 100644
index 08385abfb63..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_rightdown2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_rightleft1_73x61.png b/assets/icons/Scenes/Swimming/black_rightleft1_73x61.png
deleted file mode 100644
index b49c3d428e8..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_rightleft1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_rightleft2_73x61.png b/assets/icons/Scenes/Swimming/black_rightleft2_73x61.png
deleted file mode 100644
index ac12333bf54..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_rightleft2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_rightup1_73x61.png b/assets/icons/Scenes/Swimming/black_rightup1_73x61.png
deleted file mode 100644
index d7f17431333..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_rightup1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_rightup2_73x61.png b/assets/icons/Scenes/Swimming/black_rightup2_73x61.png
deleted file mode 100644
index 1d8fa37fa8e..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_rightup2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_up1_73x61.png b/assets/icons/Scenes/Swimming/black_up1_73x61.png
deleted file mode 100644
index 4ecc63b823c..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_up1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_up2_73x61.png b/assets/icons/Scenes/Swimming/black_up2_73x61.png
deleted file mode 100644
index 8f54a74813d..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_up2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_updown1_73x61.png b/assets/icons/Scenes/Swimming/black_updown1_73x61.png
deleted file mode 100644
index 20b43074696..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_updown1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_updown2_73x61.png b/assets/icons/Scenes/Swimming/black_updown2_73x61.png
deleted file mode 100644
index f42552527f3..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_updown2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_updown3_73x61.png b/assets/icons/Scenes/Swimming/black_updown3_73x61.png
deleted file mode 100644
index 8384fcdbcbe..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_updown3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_upleft1_73x61.png b/assets/icons/Scenes/Swimming/black_upleft1_73x61.png
deleted file mode 100644
index 22ed25c3c16..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_upleft1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_upleft2_73x61.png b/assets/icons/Scenes/Swimming/black_upleft2_73x61.png
deleted file mode 100644
index 3824f30850c..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_upleft2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_upright1_73x61.png b/assets/icons/Scenes/Swimming/black_upright1_73x61.png
deleted file mode 100644
index ea4477d82a6..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_upright1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/black_upright2_73x61.png b/assets/icons/Scenes/Swimming/black_upright2_73x61.png
deleted file mode 100644
index 6cbe223cd4e..00000000000
Binary files a/assets/icons/Scenes/Swimming/black_upright2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/down1_73x61.png b/assets/icons/Scenes/Swimming/down1_73x61.png
deleted file mode 100644
index e7fc3b0aeb3..00000000000
Binary files a/assets/icons/Scenes/Swimming/down1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/down2_73x61.png b/assets/icons/Scenes/Swimming/down2_73x61.png
deleted file mode 100644
index 6057ffe95c7..00000000000
Binary files a/assets/icons/Scenes/Swimming/down2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downleft1_73x61.png b/assets/icons/Scenes/Swimming/downleft1_73x61.png
deleted file mode 100644
index 4479288852a..00000000000
Binary files a/assets/icons/Scenes/Swimming/downleft1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downleft2_73x61.png b/assets/icons/Scenes/Swimming/downleft2_73x61.png
deleted file mode 100644
index 8cfa09ffe7f..00000000000
Binary files a/assets/icons/Scenes/Swimming/downleft2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downleft3_73x61.png b/assets/icons/Scenes/Swimming/downleft3_73x61.png
deleted file mode 100644
index c3630593038..00000000000
Binary files a/assets/icons/Scenes/Swimming/downleft3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downright1_73x61.png b/assets/icons/Scenes/Swimming/downright1_73x61.png
deleted file mode 100644
index fa246054dfc..00000000000
Binary files a/assets/icons/Scenes/Swimming/downright1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downright2_73x61.png b/assets/icons/Scenes/Swimming/downright2_73x61.png
deleted file mode 100644
index e77897fd76c..00000000000
Binary files a/assets/icons/Scenes/Swimming/downright2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downright3_73x61.png b/assets/icons/Scenes/Swimming/downright3_73x61.png
deleted file mode 100644
index a8782bcae0c..00000000000
Binary files a/assets/icons/Scenes/Swimming/downright3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downup1_73x61.png b/assets/icons/Scenes/Swimming/downup1_73x61.png
deleted file mode 100644
index fc3011e5f83..00000000000
Binary files a/assets/icons/Scenes/Swimming/downup1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downup2_73x61.png b/assets/icons/Scenes/Swimming/downup2_73x61.png
deleted file mode 100644
index 26b982cec8f..00000000000
Binary files a/assets/icons/Scenes/Swimming/downup2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/downup3_73x61.png b/assets/icons/Scenes/Swimming/downup3_73x61.png
deleted file mode 100644
index 1b5580cb0a7..00000000000
Binary files a/assets/icons/Scenes/Swimming/downup3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/left1_73x61.png b/assets/icons/Scenes/Swimming/left1_73x61.png
deleted file mode 100644
index 21f19c4b602..00000000000
Binary files a/assets/icons/Scenes/Swimming/left1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/left2_73x61.png b/assets/icons/Scenes/Swimming/left2_73x61.png
deleted file mode 100644
index 3c895a3db06..00000000000
Binary files a/assets/icons/Scenes/Swimming/left2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/left3_73x61.png b/assets/icons/Scenes/Swimming/left3_73x61.png
deleted file mode 100644
index d8d8e6354d2..00000000000
Binary files a/assets/icons/Scenes/Swimming/left3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/leftdown1_73x61.png b/assets/icons/Scenes/Swimming/leftdown1_73x61.png
deleted file mode 100644
index 6e108c3c22e..00000000000
Binary files a/assets/icons/Scenes/Swimming/leftdown1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/leftdown2_73x61.png b/assets/icons/Scenes/Swimming/leftdown2_73x61.png
deleted file mode 100644
index acc6a77f719..00000000000
Binary files a/assets/icons/Scenes/Swimming/leftdown2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/leftup1_73x61.png b/assets/icons/Scenes/Swimming/leftup1_73x61.png
deleted file mode 100644
index b1d5a821637..00000000000
Binary files a/assets/icons/Scenes/Swimming/leftup1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/leftup2_73x61.png b/assets/icons/Scenes/Swimming/leftup2_73x61.png
deleted file mode 100644
index d1070b920aa..00000000000
Binary files a/assets/icons/Scenes/Swimming/leftup2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/right1_73x61.png b/assets/icons/Scenes/Swimming/right1_73x61.png
deleted file mode 100644
index 8596cfa32c4..00000000000
Binary files a/assets/icons/Scenes/Swimming/right1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/right2_73x61.png b/assets/icons/Scenes/Swimming/right2_73x61.png
deleted file mode 100644
index 5f1e67023e6..00000000000
Binary files a/assets/icons/Scenes/Swimming/right2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/right3_73x61.png b/assets/icons/Scenes/Swimming/right3_73x61.png
deleted file mode 100644
index a7a8c6fdf74..00000000000
Binary files a/assets/icons/Scenes/Swimming/right3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/rightdown1_73x61.png b/assets/icons/Scenes/Swimming/rightdown1_73x61.png
deleted file mode 100644
index c80048355fc..00000000000
Binary files a/assets/icons/Scenes/Swimming/rightdown1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/rightdown2_73x61.png b/assets/icons/Scenes/Swimming/rightdown2_73x61.png
deleted file mode 100644
index c70f8d00fd1..00000000000
Binary files a/assets/icons/Scenes/Swimming/rightdown2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/rightleft1_73x61.png b/assets/icons/Scenes/Swimming/rightleft1_73x61.png
deleted file mode 100644
index fd1bdf0770d..00000000000
Binary files a/assets/icons/Scenes/Swimming/rightleft1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/rightleft2_73x61.png b/assets/icons/Scenes/Swimming/rightleft2_73x61.png
deleted file mode 100644
index 7ad643f17ee..00000000000
Binary files a/assets/icons/Scenes/Swimming/rightleft2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/rightup1_73x61.png b/assets/icons/Scenes/Swimming/rightup1_73x61.png
deleted file mode 100644
index 745607fc965..00000000000
Binary files a/assets/icons/Scenes/Swimming/rightup1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/rightup2_73x61.png b/assets/icons/Scenes/Swimming/rightup2_73x61.png
deleted file mode 100644
index 5a3d315db4e..00000000000
Binary files a/assets/icons/Scenes/Swimming/rightup2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/up1_73x61.png b/assets/icons/Scenes/Swimming/up1_73x61.png
deleted file mode 100644
index 0e61deae5b0..00000000000
Binary files a/assets/icons/Scenes/Swimming/up1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/up2_73x61.png b/assets/icons/Scenes/Swimming/up2_73x61.png
deleted file mode 100644
index 13f749dd957..00000000000
Binary files a/assets/icons/Scenes/Swimming/up2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/updown1_73x61.png b/assets/icons/Scenes/Swimming/updown1_73x61.png
deleted file mode 100644
index 7fcdd182b6c..00000000000
Binary files a/assets/icons/Scenes/Swimming/updown1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/updown2_73x61.png b/assets/icons/Scenes/Swimming/updown2_73x61.png
deleted file mode 100644
index 0664ad165c3..00000000000
Binary files a/assets/icons/Scenes/Swimming/updown2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/updown3_73x61.png b/assets/icons/Scenes/Swimming/updown3_73x61.png
deleted file mode 100644
index e8e39dcdd93..00000000000
Binary files a/assets/icons/Scenes/Swimming/updown3_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/upleft1_73x61.png b/assets/icons/Scenes/Swimming/upleft1_73x61.png
deleted file mode 100644
index 93a60d20eaa..00000000000
Binary files a/assets/icons/Scenes/Swimming/upleft1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/upleft2_73x61.png b/assets/icons/Scenes/Swimming/upleft2_73x61.png
deleted file mode 100644
index 24b04d56055..00000000000
Binary files a/assets/icons/Scenes/Swimming/upleft2_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/upright1_73x61.png b/assets/icons/Scenes/Swimming/upright1_73x61.png
deleted file mode 100644
index 27a6f0a00cb..00000000000
Binary files a/assets/icons/Scenes/Swimming/upright1_73x61.png and /dev/null differ
diff --git a/assets/icons/Scenes/Swimming/upright2_73x61.png b/assets/icons/Scenes/Swimming/upright2_73x61.png
deleted file mode 100644
index d371b00eeeb..00000000000
Binary files a/assets/icons/Scenes/Swimming/upright2_73x61.png and /dev/null differ
diff --git a/assets/resources/irda/universal/tv.ir b/assets/resources/irda/universal/tv.ir
new file mode 100755
index 00000000000..6dbbf76078b
--- /dev/null
+++ b/assets/resources/irda/universal/tv.ir
@@ -0,0 +1,45 @@
+POWER Samsung32 A:07 C:02
+POWER NEC A:50 C:17
+POWER NEC A:40 C:12
+POWER NECext A:4931 C:63
+POWER NEC A:AA C:1C
+POWER NEC A:AA C:1C
+POWER NEC A:AA C:1C
+POWER NEC A:AA C:1C
+POWER NEC A:38 C:1C
+POWER NECext A:7A83 C:08
+POWER NEC A:53 C:17
+POWER NECext A:1818 C:C0
+POWER NEC A:38 C:10
+POWER NEC A:AA C:C5
+POWER NEC A:04 C:08
+POWER NEC A:18 C:08
+POWER NEC A:71 C:08
+POWER NECext A:6F80 C:0A
+POWER NEC A:48 C:00
+POWER NECext A:7B80 C:13
+#POWER Samsung32 A:0E C:14
+POWER NECext A:7E80 C:18
+POWER NEC A:50 C:08
+
+VOL- NECext A:DF00 C:4F
+CH+ NECext A:DF00 C:09
+CH- NECext A:DF00 C:05
+MUTE NECext A:DF00 C:08
+
+// Microlab (Not TV)
+POWER NEC A:00 C:00
+MUTE NEC A:00 C:02
+VOL+ NEC A:00 C:11
+VOL- NEC A:00 C:10
+
+// Skyworth
+POWER Samsung32 A:0E C:0C
+MUTE Samsung32 A:0E C:0D
+VOL+ Samsung32 A:0E C:14
+VOL- Samsung32 A:0E C:15
+CH- Samsung32 A:0E C:12
+CH+ Samsung32 A:0E C:13
+
+// LG (Goldstar)
+MUTE NEC A
diff --git a/bootloader/ReadMe.md b/bootloader/ReadMe.md
index b65419941b5..19a99ac710a 100644
--- a/bootloader/ReadMe.md
+++ b/bootloader/ReadMe.md
@@ -2,9 +2,9 @@
What it does?
-- [+] Hardware initialization
-- [+] Boot process LED indicators
-- [+] Firmware update
+- [x] Hardware initialization
+- [x] Boot process LED indicators
+- [x] Firmware update
- [ ] Firmware CRC check
- [ ] Interactive UI
- [ ] FS check
diff --git a/docker-compose.yml b/docker-compose.yml
index 42d05584ba6..68aa14c174f 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,16 +1,12 @@
version: '3'
services:
dev:
- build: docker
- network_mode: "host"
+ image: flipperdevices/flipperzero-toolchain
+ network_mode: host
privileged: true
tty: true
stdin_open: true
volumes:
- .:/project
- /dev/bus/usb:/dev/bus/usb
- working_dir: "/project"
- environment:
- DISPLAY: $DISPLAY
- TERM: xterm-256color
- PATH: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+ working_dir: '/project'
\ No newline at end of file
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 406d806e228..f6ab89c3804 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,78 +1,33 @@
-FROM ubuntu:18.04
+FROM ubuntu:focal
-# hadolint ignore=DL3008
-RUN apt-get update && \
- DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- software-properties-common \
- gpg-agent \
- make \
- cmake \
- autoconf \
- automake \
- libtool \
- libusb-1.0 \
- libusb-1.0-0-dev \
- libgtk-3-dev pandoc \
- curl \
- wget \
- g++ \
- gcc \
- unzip \
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
+ ca-certificates \
build-essential \
- python \
- python-dev \
- python-pip \
- python-setuptools \
python3 \
- imagemagick \
- srecord \
+ python-lxml \
git \
- pkg-config \
- dfu-util \
- && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
-
-RUN pip install lxml
-
-
-SHELL ["/bin/bash", "-eo", "pipefail", "-c"]
-RUN wget --progress=dot:giga -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | apt-key add - && add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-12 main"
-
-# hadolint ignore=DL3008
-RUN apt-get update && \
- apt-get install -y --no-install-recommends \
- libclang-12-dev \
clang-format-12 \
- && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
-
-# install arm-none-eabi
+ dfu-util \
+ openocd \
+ srecord \
+ libncurses5 \
+ wget && \
+ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
-# hadolint ignore=DL3003
-RUN wget --progress=dot:giga "https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2" && \
- tar xjf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 && \
- rm gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 && \
+RUN wget --progress=dot:giga "https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-$(uname -m)-linux.tar.bz2" && \
+ tar xjf gcc-arm-none-eabi-10-2020-q4-major-$(uname -m)-linux.tar.bz2 && \
+ rm gcc-arm-none-eabi-10-2020-q4-major-$(uname -m)-linux.tar.bz2 && \
cd gcc-arm-none-eabi-10-2020-q4-major/bin/ && \
+ rm -rf ../share && \
for file in * ; do ln -s "${PWD}/${file}" "/usr/bin/${file}" ; done && \
cd / && arm-none-eabi-gcc -v && arm-none-eabi-gdb -v
-# install hex2dfu
-
-# hadolint ignore=DL3003
-RUN wget --progress=dot:giga "https://github.com/rusdacent/hex2dfu/archive/master.zip" --output-document=hex2dfu.zip && \
- unzip hex2dfu.zip && \
- rm hex2dfu.zip && \
- cd hex2dfu-master && gcc hex2dfu.c ED25519/*.c -o hex2dfu && \
- ln -s "${PWD}/hex2dfu" /usr/bin/hex2dfu
-
-# install openocd
-
-# hadolint ignore=DL3003
-RUN git clone --depth 1 --branch v0.11.0 https://github.com/ntfreak/openocd.git && \
- cd openocd && ./bootstrap && ./configure && make install && \
- cd .. && rm -rf openocd && \
- openocd --version
+RUN git clone https://github.com/rusdacent/hex2dfu.git && \
+ cd hex2dfu && gcc hex2dfu.c ED25519/*.c -o hex2dfu && mv ./hex2dfu /usr/local/bin/hex2dfu && \
+ hex2dfu -h
COPY entrypoint.sh syntax_check.sh /
RUN chmod +x /syntax_check.sh
-ENTRYPOINT ["/entrypoint.sh"]
+ENTRYPOINT ["/entrypoint.sh"]
\ No newline at end of file
diff --git a/docker/syntax_check.sh b/docker/syntax_check.sh
index be74df29dbc..0bd3466ad83 100755
--- a/docker/syntax_check.sh
+++ b/docker/syntax_check.sh
@@ -3,7 +3,6 @@
# set -e
CLANG_FORMAT_BIN="/usr/bin/clang-format-12"
-PATH="$HOME/.cargo/bin:${PATH}"
PROJECT_DIR=$(pwd)
@@ -19,14 +18,20 @@ C_FILES=$(find . \
ulimit -s 65536
$CLANG_FORMAT_BIN --version
-$CLANG_FORMAT_BIN --verbose -style=file -n --Werror --ferror-limit=0 $C_FILES
-c_syntax_rc=$?
+errors=$($CLANG_FORMAT_BIN --verbose -style=file -n --Werror --ferror-limit=0 $C_FILES |& tee /dev/stderr | sed '/^Formatting/d')
-if [[ $c_syntax_rc -eq 0 ]]; then
+if [[ -z "$errors" ]]; then
echo "Code looks fine for me!"
exit 0
fi
+if [[ -n "${SET_GH_OUTPUT}" ]]; then
+ errors="${errors//'%'/'%25'}"
+ errors="${errors//$'\n'/'%0A'}"
+ errors="${errors//$'\r'/'%0D'}"
+ echo "::set-output name=errors::$errors"
+fi
+
read -p "Do you want fix syntax? (y/n): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
cd $PROJECT_DIR
diff --git a/firmware/targets/f6/Inc/FreeRTOSConfig.h b/firmware/targets/f6/Inc/FreeRTOSConfig.h
index 748fc7f6894..5d2befdeab6 100644
--- a/firmware/targets/f6/Inc/FreeRTOSConfig.h
+++ b/firmware/targets/f6/Inc/FreeRTOSConfig.h
@@ -51,17 +51,16 @@
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
#include
extern uint32_t SystemCoreClock;
- void xPortSysTickHandler(void);
-/* USER CODE BEGIN 0 */
- extern void configureTimerForRunTimeStats(void);
- extern unsigned long getRunTimeCounterValue(void);
-/* USER CODE END 0 */
#endif
+#ifndef CMSIS_device_header
+#define CMSIS_device_header "stm32wbxx.h"
+#endif /* CMSIS_device_header */
+
#define configENABLE_FPU 1
#define configENABLE_MPU 1
#define configUSE_PREEMPTION 1
-#define configSUPPORT_STATIC_ALLOCATION 1
+#define configSUPPORT_STATIC_ALLOCATION 0
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
@@ -100,22 +99,24 @@
/* Software timer definitions. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 2 )
-#define configTIMER_QUEUE_LENGTH 10
+#define configTIMER_QUEUE_LENGTH 32
#define configTIMER_TASK_STACK_DEPTH 256
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
-#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_eTaskGetState 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_vTaskSuspend 1
-#define INCLUDE_vTaskDelayUntil 1
-#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xQueueGetMutexHolder 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
#define INCLUDE_xTaskGetSchedulerState 1
#define INCLUDE_xTimerPendFunctionCall 1
-#define INCLUDE_xQueueGetMutexHolder 1
-#define INCLUDE_uxTaskGetStackHighWaterMark 1
-#define INCLUDE_eTaskGetState 1
/*
* The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
@@ -159,9 +160,13 @@ standard names. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
-/* IMPORTANT: This define is commented when used with STM32Cube firmware, when the timebase source is SysTick,
- to prevent overwriting SysTick_Handler defined within STM32Cube HAL */
+/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */
+
+#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1
-/* #define xPortSysTickHandler SysTick_Handler */
+/* USER CODE BEGIN Defines */
+/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
+#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1 /* required only for Keil but does not hurt otherwise */
+/* USER CODE END Defines */
#endif /* FREERTOS_CONFIG_H */
diff --git a/firmware/targets/f6/Src/fatfs/stm32_adafruit_sd.c b/firmware/targets/f6/Src/fatfs/stm32_adafruit_sd.c
index 9c328d30ced..e90ebd62be0 100644
--- a/firmware/targets/f6/Src/fatfs/stm32_adafruit_sd.c
+++ b/firmware/targets/f6/Src/fatfs/stm32_adafruit_sd.c
@@ -393,13 +393,12 @@ uint8_t BSP_SD_GetCardInfo(SD_CardInfo* pCardInfo) {
uint8_t
BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
uint32_t offset = 0;
+ uint32_t addr;
uint8_t retr = BSP_SD_ERROR;
+ uint8_t* ptr = NULL;
SD_CmdAnswer_typedef response;
uint16_t BlockSize = 512;
- uint8_t* ptr = NULL;
- // uint8_t ptr[512];
-
/* Send CMD16 (SD_CMD_SET_BLOCKLEN) to set the size of the block and
Check if the SD acknowledged the set block length command: R1 response (0x00: no errors) */
response = SD_SendCmd(SD_CMD_SET_BLOCKLEN, BlockSize, 0xFF, SD_ANSWER_R1_EXPECTED);
@@ -415,15 +414,14 @@ BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint
}
memset(ptr, SD_DUMMY_BYTE, sizeof(uint8_t) * BlockSize);
+ /* Initialize the address */
+ addr = (ReadAddr * ((flag_SDHC == 1) ? 1 : BlockSize));
+
/* Data transfer */
while(NumOfBlocks--) {
/* Send CMD17 (SD_CMD_READ_SINGLE_BLOCK) to read one block */
/* Check if the SD acknowledged the read block command: R1 response (0x00: no errors) */
- response = SD_SendCmd(
- SD_CMD_READ_SINGLE_BLOCK,
- (ReadAddr + offset) * (flag_SDHC == 1 ? 1 : BlockSize),
- 0xFF,
- SD_ANSWER_R1_EXPECTED);
+ response = SD_SendCmd(SD_CMD_READ_SINGLE_BLOCK, addr, 0xFF, SD_ANSWER_R1_EXPECTED);
if(response.r1 != SD_R1_NO_ERROR) {
goto error;
}
@@ -435,6 +433,8 @@ BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint
/* Set next read address*/
offset += BlockSize;
+ addr = ((flag_SDHC == 1) ? (addr + 1) : (addr + BlockSize));
+
/* get CRC bytes (not really needed by us, but required by SD) */
SD_IO_WriteByte(SD_DUMMY_BYTE);
SD_IO_WriteByte(SD_DUMMY_BYTE);
@@ -471,6 +471,7 @@ BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint
uint8_t
BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
uint32_t offset = 0;
+ uint32_t addr;
uint8_t retr = BSP_SD_ERROR;
uint8_t* ptr = NULL;
SD_CmdAnswer_typedef response;
@@ -490,15 +491,14 @@ BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, ui
goto error;
}
+ /* Initialize the address */
+ addr = (WriteAddr * ((flag_SDHC == 1) ? 1 : BlockSize));
+
/* Data transfer */
while(NumOfBlocks--) {
/* Send CMD24 (SD_CMD_WRITE_SINGLE_BLOCK) to write blocks and
Check if the SD acknowledged the write block command: R1 response (0x00: no errors) */
- response = SD_SendCmd(
- SD_CMD_WRITE_SINGLE_BLOCK,
- (WriteAddr + offset) * (flag_SDHC == 1 ? 1 : BlockSize),
- 0xFF,
- SD_ANSWER_R1_EXPECTED);
+ response = SD_SendCmd(SD_CMD_WRITE_SINGLE_BLOCK, addr, 0xFF, SD_ANSWER_R1_EXPECTED);
if(response.r1 != SD_R1_NO_ERROR) {
goto error;
}
@@ -515,7 +515,8 @@ BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, ui
/* Set next write address */
offset += BlockSize;
-
+ addr = ((flag_SDHC == 1) ? (addr + 1) : (addr + BlockSize));
+
/* Put CRC bytes (not really needed by us, but required by SD) */
SD_IO_WriteByte(SD_DUMMY_BYTE);
SD_IO_WriteByte(SD_DUMMY_BYTE);
diff --git a/firmware/targets/f6/Src/usbd_cdc_if.c b/firmware/targets/f6/Src/usbd_cdc_if.c
index 8a7b5913a5e..b18c5a561ff 100644
--- a/firmware/targets/f6/Src/usbd_cdc_if.c
+++ b/firmware/targets/f6/Src/usbd_cdc_if.c
@@ -241,7 +241,9 @@ static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
- _furi_hal_vcp_rx_callback((char*)Buf, *Len);
+ if (*Len) {
+ _furi_hal_vcp_rx_callback((char*)Buf, *Len);
+ }
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
return (USBD_OK);
/* USER CODE END 6 */
diff --git a/firmware/targets/f6/ble-glue/app_debug.c b/firmware/targets/f6/ble-glue/app_debug.c
index 0e09f44fc47..e1c29b46318 100644
--- a/firmware/targets/f6/ble-glue/app_debug.c
+++ b/firmware/targets/f6/ble-glue/app_debug.c
@@ -52,12 +52,13 @@ typedef PACKED_STRUCT
* THIS SHALL BE SET TO A VALUE DIFFERENT FROM 0 ONLY ON REQUEST FROM ST SUPPORT
*/
#define BLE_DTB_CFG 0
+#define SYS_DBG_CFG1 (SHCI_C2_DEBUG_OPTIONS_IPCORE_LP | SHCI_C2_DEBUG_OPTIONS_CPU2_STOP_EN)
/* USER CODE END PD */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static SHCI_C2_DEBUG_TracesConfig_t APPD_TracesConfig={0, 0, 0, 0};
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static SHCI_C2_DEBUG_GeneralConfig_t APPD_GeneralConfig={BLE_DTB_CFG, {0, 0, 0}};
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static SHCI_C2_DEBUG_GeneralConfig_t APPD_GeneralConfig={BLE_DTB_CFG, SYS_DBG_CFG1, {0, 0}};
/**
* THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
diff --git a/firmware/targets/f6/furi-hal/furi-hal-console.c b/firmware/targets/f6/furi-hal/furi-hal-console.c
index d34f214a97b..6aee4427b20 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-console.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-console.c
@@ -3,6 +3,7 @@
#include
#include
#include
+#include
#include
@@ -55,4 +56,14 @@ void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size) {
/* Wait for TC flag to be raised for last char */
while (!LL_USART_IsActiveFlag_TC(USART1));
+}
+
+void furi_hal_console_printf(const char format[], ...) {
+ string_t string;
+ va_list args;
+ va_start(args, format);
+ string_init_vprintf(string, format, args);
+ va_end(args);
+ furi_hal_console_tx((const uint8_t*)string_get_cstr(string), string_size(string));
+ string_clear(string);
}
\ No newline at end of file
diff --git a/firmware/targets/f6/furi-hal/furi-hal-console.h b/firmware/targets/f6/furi-hal/furi-hal-console.h
index 1254083f724..55ca8791308 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-console.h
+++ b/firmware/targets/f6/furi-hal/furi-hal-console.h
@@ -11,6 +11,8 @@ void furi_hal_console_init();
void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size);
+void furi_hal_console_printf(const char format[], ...);
+
#ifdef __cplusplus
}
#endif
diff --git a/firmware/targets/f6/furi-hal/furi-hal-flash.c b/firmware/targets/f6/furi-hal/furi-hal-flash.c
index 0cd80313c63..5346965fd30 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-flash.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-flash.c
@@ -5,7 +5,6 @@
/* Free flash space borders, exported by linker */
extern const void __free_flash_start__;
-extern const void __free_flash_end__;
#define FURI_HAL_FLASH_READ_BLOCK 8
#define FURI_HAL_FLASH_WRITE_BLOCK 8
@@ -37,7 +36,9 @@ const void* furi_hal_flash_get_free_start_address() {
}
const void* furi_hal_flash_get_free_end_address() {
- return &__free_flash_end__;
+ FLASH_OBProgramInitTypeDef pOBInit;
+ HAL_FLASHEx_OBGetConfig(&pOBInit);
+ return (const void *)pOBInit.SecureFlashStartAddr;
}
size_t furi_hal_flash_get_free_page_start_address() {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-irda.c b/firmware/targets/f6/furi-hal/furi-hal-irda.c
index 16e5b8dd815..370fea42c11 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-irda.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-irda.c
@@ -17,6 +17,13 @@
#include
#include
+#define IRDA_TX_DEBUG 0
+
+#if IRDA_TX_DEBUG == 1
+#define gpio_irda_tx gpio_irda_tx_debug
+const GpioPin gpio_irda_tx_debug = {.port = GPIOA, .pin = GPIO_PIN_7};
+#endif
+
#define IRDA_TIM_TX_DMA_BUFFER_SIZE 200
#define IRDA_POLARITY_SHIFT 1
@@ -46,6 +53,9 @@ typedef struct {
void* signal_sent_context;
IrdaTxBuf buffer[2];
osSemaphoreId_t stop_semaphore;
+ uint32_t tx_timing_rest_duration; /** if timing is too long (> 0xFFFF), send it in few iterations */
+ bool tx_timing_rest_level;
+ FuriHalIrdaTxGetDataState tx_timing_rest_status;
} IrdaTimTx;
typedef enum {
@@ -62,7 +72,7 @@ static volatile IrdaState furi_hal_irda_state = IrdaStateIdle;
static IrdaTimTx irda_tim_tx;
static IrdaTimRx irda_tim_rx;
-static bool furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift);
+static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift);
static void furi_hal_irda_async_tx_free_resources(void);
static void furi_hal_irda_tx_dma_set_polarity(uint8_t buf_num, uint8_t polarity_shift);
static void furi_hal_irda_tx_dma_set_buffer(uint8_t buf_num);
@@ -72,6 +82,7 @@ static void furi_hal_irda_tx_dma_polarity_isr();
static void furi_hal_irda_tx_dma_isr();
static void furi_hal_irda_tim_rx_isr() {
+ static uint32_t previous_captured_ch2 = 0;
/* Timeout */
if(LL_TIM_IsActiveFlag_CC3(TIM2)) {
@@ -97,7 +108,7 @@ static void furi_hal_irda_tim_rx_isr() {
if(READ_BIT(TIM2->CCMR1, TIM_CCMR1_CC1S)) {
/* Low pin level is a Mark state of IRDA signal. Invert level for further processing. */
- uint32_t duration = LL_TIM_IC_GetCaptureCH1(TIM2) - LL_TIM_IC_GetCaptureCH2(TIM2);
+ uint32_t duration = LL_TIM_IC_GetCaptureCH1(TIM2) - previous_captured_ch2;
if (irda_tim_rx.capture_callback)
irda_tim_rx.capture_callback(irda_tim_rx.capture_context, 1, duration);
} else {
@@ -113,6 +124,7 @@ static void furi_hal_irda_tim_rx_isr() {
if(READ_BIT(TIM2->CCMR1, TIM_CCMR1_CC2S)) {
/* High pin level is a Space state of IRDA signal. Invert level for further processing. */
uint32_t duration = LL_TIM_IC_GetCaptureCH2(TIM2);
+ previous_captured_ch2 = duration;
if (irda_tim_rx.capture_callback)
irda_tim_rx.capture_callback(irda_tim_rx.capture_context, 0, duration);
} else {
@@ -258,14 +270,10 @@ static void furi_hal_irda_tx_dma_isr() {
if (irda_tim_tx.buffer[buf_num].last_packet_end) {
LL_DMA_DisableIT_HT(DMA1, LL_DMA_CHANNEL_2);
} else if (!irda_tim_tx.buffer[buf_num].packet_end || (furi_hal_irda_state == IrdaStateAsyncTx)) {
- bool result = furi_hal_irda_tx_fill_buffer(next_buf_num, 0);
+ furi_hal_irda_tx_fill_buffer(next_buf_num, 0);
if (irda_tim_tx.buffer[next_buf_num].last_packet_end) {
LL_DMA_DisableIT_HT(DMA1, LL_DMA_CHANNEL_2);
}
- if (!result) {
- furi_assert(0);
- furi_hal_irda_state = IrdaStateAsyncTxStopReq;
- }
} else if (furi_hal_irda_state == IrdaStateAsyncTxStopReq) {
/* fallthrough */
} else {
@@ -291,7 +299,7 @@ static void furi_hal_irda_tx_dma_isr() {
/* if it's not end of the packet - continue receiving */
furi_hal_irda_tx_dma_set_buffer(next_buf_num);
}
- if (irda_tim_tx.signal_sent_callback) {
+ if (irda_tim_tx.signal_sent_callback && irda_tim_tx.buffer[buf_num].packet_end && (furi_hal_irda_state != IrdaStateAsyncTxStopped)) {
irda_tim_tx.signal_sent_callback(irda_tim_tx.signal_sent_context);
}
}
@@ -309,6 +317,16 @@ static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP);
LL_TIM_EnableARRPreload(TIM1);
LL_TIM_SetAutoReload(TIM1, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM1), freq));
+#if IRDA_TX_DEBUG == 1
+ LL_TIM_OC_SetCompareCH1(TIM1, ( (LL_TIM_GetAutoReload(TIM1) + 1 ) * (1 - duty_cycle)));
+ LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH1);
+ /* LL_TIM_OCMODE_PWM2 set by DMA */
+ LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_FORCED_INACTIVE);
+ LL_TIM_OC_SetPolarity(TIM1, LL_TIM_CHANNEL_CH1N, LL_TIM_OCPOLARITY_HIGH);
+ LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH1);
+ LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N);
+ LL_TIM_DisableIT_CC1(TIM1);
+#else
LL_TIM_OC_SetCompareCH3(TIM1, ( (LL_TIM_GetAutoReload(TIM1) + 1 ) * (1 - duty_cycle)));
LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH3);
/* LL_TIM_OCMODE_PWM2 set by DMA */
@@ -317,6 +335,7 @@ static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH3);
LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH3N);
LL_TIM_DisableIT_CC3(TIM1);
+#endif
LL_TIM_DisableMasterSlaveMode(TIM1);
LL_TIM_EnableAllOutputs(TIM1);
LL_TIM_DisableIT_UPDATE(TIM1);
@@ -330,7 +349,11 @@ static void furi_hal_irda_configure_tim_cmgr2_dma_tx(void) {
LL_C2_AHB1_GRP1_EnableClock(LL_C2_AHB1_GRP1_PERIPH_DMA1);
LL_DMA_InitTypeDef dma_config = {0};
+#if IRDA_TX_DEBUG == 1
+ dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->CCMR1);
+#else
dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->CCMR2);
+#endif
dma_config.MemoryOrM2MDstAddress = (uint32_t) NULL;
dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH;
dma_config.Mode = LL_DMA_MODE_NORMAL;
@@ -399,7 +422,7 @@ static void furi_hal_irda_tx_fill_buffer_last(uint8_t buf_num) {
irda_tim_tx.buffer[buf_num].packet_end = true;
}
-static bool furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift) {
+static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift) {
furi_assert(buf_num < 2);
furi_assert(furi_hal_irda_state != IrdaStateAsyncRx);
furi_assert(furi_hal_irda_state < IrdaStateMAX);
@@ -418,28 +441,53 @@ static bool furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
}
for (*size = 0; (*size < IRDA_TIM_TX_DMA_BUFFER_SIZE) && (status == FuriHalIrdaTxGetDataStateOk); ++(*size), ++polarity_counter) {
- status = irda_tim_tx.data_callback(irda_tim_tx.data_context, &duration, &level);
- if (status == FuriHalIrdaTxGetDataStateError) {
- furi_assert(0);
- break;
+ if (irda_tim_tx.tx_timing_rest_duration > 0) {
+ if (irda_tim_tx.tx_timing_rest_duration > 0xFFFF) {
+ buffer->data[*size] = 0xFFFF;
+ status = FuriHalIrdaTxGetDataStateOk;
+ } else {
+ buffer->data[*size] = irda_tim_tx.tx_timing_rest_duration;
+ status = irda_tim_tx.tx_timing_rest_status;
+ }
+ irda_tim_tx.tx_timing_rest_duration -= buffer->data[*size];
+ buffer->polarity[polarity_counter] = irda_tim_tx.tx_timing_rest_level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
+ continue;
}
+ status = irda_tim_tx.data_callback(irda_tim_tx.data_context, &duration, &level);
+
uint32_t num_of_impulses = roundf(duration / irda_tim_tx.cycle_duration);
- if ((buffer->data[*size] + num_of_impulses - 1) > 0xFFFF) {
- furi_assert(0);
- status = FuriHalIrdaTxGetDataStateError;
- break;
+ if (num_of_impulses == 0) {
+ if ((*size == 0) && (status == FuriHalIrdaTxGetDataStateDone)) {
+ /* if this is one sample in current buffer, but we
+ * have more to send - continue
+ */
+ status = FuriHalIrdaTxGetDataStateOk;
+ }
+ --(*size);
+ --polarity_counter;
+ } else if ((num_of_impulses - 1) > 0xFFFF) {
+ irda_tim_tx.tx_timing_rest_duration = num_of_impulses - 1;
+ irda_tim_tx.tx_timing_rest_status = status;
+ irda_tim_tx.tx_timing_rest_level = level;
+ buffer->polarity[polarity_counter] = level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
+ buffer->data[*size] = 0xFFFF;
+ status = FuriHalIrdaTxGetDataStateOk;
+ } else {
+ buffer->polarity[polarity_counter] = level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
+ buffer->data[*size] = num_of_impulses - 1;
}
-
- buffer->polarity[polarity_counter] = level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
- buffer->data[*size] = num_of_impulses - 1;
}
buffer->last_packet_end = (status == FuriHalIrdaTxGetDataStateLastDone);
buffer->packet_end = buffer->last_packet_end || (status == FuriHalIrdaTxGetDataStateDone);
- return status != FuriHalIrdaTxGetDataStateError;
+ if (*size == 0) {
+ buffer->data[0] = 0; // 1 pulse
+ buffer->polarity[0] = IRDA_TX_CCMR_LOW;
+ buffer->size = 1;
+ }
}
static void furi_hal_irda_tx_dma_set_polarity(uint8_t buf_num, uint8_t polarity_shift) {
@@ -505,10 +553,9 @@ static void furi_hal_irda_async_tx_free_resources(void) {
irda_tim_tx.buffer[1].polarity = NULL;
}
-bool furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
- if ((duty_cycle > 1) || (duty_cycle < 0) || (freq > 40000) || (freq < 10000) || (irda_tim_tx.data_callback == NULL)) {
- furi_assert(0);
- return false;
+void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
+ if ((duty_cycle > 1) || (duty_cycle <= 0) || (freq > IRDA_MAX_FREQUENCY) || (freq < IRDA_MIN_FREQUENCY) || (irda_tim_tx.data_callback == NULL)) {
+ furi_check(0);
}
furi_assert(furi_hal_irda_state == IrdaStateIdle);
@@ -527,37 +574,31 @@ bool furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
irda_tim_tx.stop_semaphore = osSemaphoreNew(1, 0, NULL);
irda_tim_tx.cycle_duration = 1000000.0 / freq;
+ irda_tim_tx.tx_timing_rest_duration = 0;
- bool result = furi_hal_irda_tx_fill_buffer(0, IRDA_POLARITY_SHIFT);
-
- if (result) {
- furi_hal_irda_configure_tim_pwm_tx(freq, duty_cycle);
- furi_hal_irda_configure_tim_cmgr2_dma_tx();
- furi_hal_irda_configure_tim_rcr_dma_tx();
- furi_hal_irda_tx_dma_set_polarity(0, IRDA_POLARITY_SHIFT);
- furi_hal_irda_tx_dma_set_buffer(0);
-
- furi_hal_irda_state = IrdaStateAsyncTx;
+ furi_hal_irda_tx_fill_buffer(0, IRDA_POLARITY_SHIFT);
- LL_TIM_ClearFlag_UPDATE(TIM1);
- LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
- LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
- delay_us(5);
- LL_TIM_GenerateEvent_UPDATE(TIM1); /* DMA -> TIMx_RCR */
- delay_us(5);
- LL_GPIO_ResetOutputPin(gpio_irda_tx.port, gpio_irda_tx.pin); /* when disable it prevents false pulse */
- hal_gpio_init_ex(&gpio_irda_tx, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedHigh, GpioAltFn1TIM1);
+ furi_hal_irda_configure_tim_pwm_tx(freq, duty_cycle);
+ furi_hal_irda_configure_tim_cmgr2_dma_tx();
+ furi_hal_irda_configure_tim_rcr_dma_tx();
+ furi_hal_irda_tx_dma_set_polarity(0, IRDA_POLARITY_SHIFT);
+ furi_hal_irda_tx_dma_set_buffer(0);
- __disable_irq();
- LL_TIM_GenerateEvent_UPDATE(TIM1); /* TIMx_RCR -> Repetition counter */
- LL_TIM_EnableCounter(TIM1);
- __enable_irq();
+ furi_hal_irda_state = IrdaStateAsyncTx;
- } else {
- furi_hal_irda_async_tx_free_resources();
- }
+ LL_TIM_ClearFlag_UPDATE(TIM1);
+ LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
+ LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
+ delay_us(5);
+ LL_TIM_GenerateEvent_UPDATE(TIM1); /* DMA -> TIMx_RCR */
+ delay_us(5);
+ LL_GPIO_ResetOutputPin(gpio_irda_tx.port, gpio_irda_tx.pin); /* when disable it prevents false pulse */
+ hal_gpio_init_ex(&gpio_irda_tx, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedHigh, GpioAltFn1TIM1);
- return result;
+ __disable_irq();
+ LL_TIM_GenerateEvent_UPDATE(TIM1); /* TIMx_RCR -> Repetition counter */
+ LL_TIM_EnableCounter(TIM1);
+ __enable_irq();
}
void furi_hal_irda_async_tx_wait_termination(void) {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-nfc.c b/firmware/targets/f6/furi-hal/furi-hal-nfc.c
index d64a344ec77..d92e2cadedc 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-nfc.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-nfc.c
@@ -86,9 +86,8 @@ bool furi_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t ti
return true;
}
-bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t sak, uint32_t timeout) {
+bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t sak, bool activate_after_sak, uint32_t timeout) {
rfalNfcState state = rfalNfcGetState();
-
if(state == RFAL_NFC_STATE_NOTINIT) {
rfalNfcInitialize();
} else if(state >= RFAL_NFC_STATE_ACTIVATED) {
@@ -107,6 +106,7 @@ bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t s
.maxBR = RFAL_BR_KEEP,
.GBLen = RFAL_NFCDEP_GB_MAX_LEN,
.notifyCb = NULL,
+ .activate_after_sak = activate_after_sak,
};
params.lmConfigPA.nfcidLen = uid_len;
memcpy(params.lmConfigPA.nfcid, uid, uid_len);
@@ -119,7 +119,6 @@ bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t s
while(state != RFAL_NFC_STATE_ACTIVATED) {
rfalNfcWorker();
state = rfalNfcGetState();
- FURI_LOG_D("HAL NFC", "Current state %d", state);
if(DWT->CYCCNT - start > timeout * clocks_in_ms) {
rfalNfcDeactivate(true);
return false;
@@ -129,6 +128,11 @@ bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t s
return true;
}
+bool furi_hal_nfc_get_first_frame(uint8_t** rx_buff, uint16_t** rx_len) {
+ ReturnCode ret = rfalNfcDataExchangeStart(NULL, 0, rx_buff, rx_len, 0);
+ return ret == ERR_NONE;
+}
+
ReturnCode furi_hal_nfc_data_exchange(uint8_t* tx_buff, uint16_t tx_len, uint8_t** rx_buff, uint16_t** rx_len, bool deactivate) {
furi_assert(rx_buff);
furi_assert(rx_len);
@@ -144,7 +148,6 @@ ReturnCode furi_hal_nfc_data_exchange(uint8_t* tx_buff, uint16_t tx_len, uint8_t
rfalNfcWorker();
state = rfalNfcGetState();
ret = rfalNfcDataExchangeGetStatus();
- FURI_LOG_D("HAL NFC", "Nfc st: %d Data st: %d", state, ret);
if(ret > ERR_SLEEP_REQ) {
return ret;
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-os.c b/firmware/targets/f6/furi-hal/furi-hal-os.c
index 0e55df53d8d..eb1811b65cd 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-os.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-os.c
@@ -26,6 +26,8 @@ void furi_hal_os_timer_callback() {
}
#endif
+extern void xPortSysTickHandler();
+
volatile uint32_t furi_hal_os_skew = 0;
void furi_hal_os_init() {
@@ -122,9 +124,6 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
// Sleep and track how much ticks we spent sleeping
uint32_t completed_ticks = furi_hal_os_sleep(expected_idle_ticks);
- // Reenable IRQ
- __enable_irq();
-
// Notify system about time spent in sleep
if (completed_ticks > 0) {
if (completed_ticks > expected_idle_ticks) {
@@ -133,6 +132,9 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
vTaskStepTick(completed_ticks);
}
}
+
+ // Reenable IRQ
+ __enable_irq();
}
void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName) {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-subghz.c b/firmware/targets/f6/furi-hal/furi-hal-subghz.c
index 62cd2668a57..0b1b7b0194b 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-subghz.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-subghz.c
@@ -404,6 +404,7 @@ void furi_hal_subghz_stop_async_rx() {
#define API_HAL_SUBGHZ_ASYNC_TX_BUFFER_FULL (256)
#define API_HAL_SUBGHZ_ASYNC_TX_BUFFER_HALF (API_HAL_SUBGHZ_ASYNC_TX_BUFFER_FULL/2)
+#define API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME 333
typedef struct {
uint32_t* buffer;
@@ -416,16 +417,30 @@ static FuriHalSubGhzAsyncTx furi_hal_subghz_async_tx = {0};
static void furi_hal_subghz_async_tx_refill(uint32_t* buffer, size_t samples) {
while (samples > 0) {
+ bool is_odd = samples % 2;
LevelDuration ld = furi_hal_subghz_async_tx.callback(furi_hal_subghz_async_tx.callback_context);
if (level_duration_is_reset(ld)) {
+ // One more even sample required to end at low level
+ if (is_odd) {
+ *buffer = API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME;
+ buffer++;
+ samples--;
+ }
break;
- } else {
+ } else {
+ // Inject guard time if level is incorrect
+ if (is_odd == level_duration_get_level(ld)) {
+ *buffer = API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME;
+ buffer++;
+ samples--;
+ }
+
uint32_t duration = level_duration_get_duration(ld);
assert(duration > 0);
*buffer = duration;
+ buffer++;
+ samples--;
}
- buffer++;
- samples--;
}
memset(buffer, 0, samples * sizeof(uint32_t));
@@ -452,7 +467,6 @@ static void furi_hal_subghz_async_tx_timer_isr() {
} else {
furi_hal_subghz_state = SubGhzStateAsyncTxEnd;
LL_TIM_DisableCounter(TIM2);
- hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullDown, GpioSpeedLow);
}
}
}
diff --git a/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld b/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld
index faa4301bd0a..f87127ccd43 100644
--- a/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld
+++ b/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld
@@ -55,7 +55,7 @@ _Min_Stack_Size = 0x1000; /* required amount of stack */
/* Specify the memory areas */
MEMORY
{
-FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 780K
+FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 992K
RAM1 (xrw) : ORIGIN = 0x20000004, LENGTH = 0x2FFFC
RAM_SHARED (xrw) : ORIGIN = 0x20030000, LENGTH = 10K
}
@@ -173,7 +173,6 @@ SECTIONS
{
__free_flash_start__ = .;
. = ORIGIN(FLASH) + LENGTH(FLASH);
- __free_flash_end__ = .;
} >FLASH
/* Remove information from the standard libraries */
diff --git a/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld b/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld
index 095f368bc56..ac7a1015942 100644
--- a/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld
+++ b/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld
@@ -55,7 +55,7 @@ _Min_Stack_Size = 0x1000; /* required amount of stack */
/* Specify the memory areas */
MEMORY
{
-FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 812K
+FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
RAM1 (xrw) : ORIGIN = 0x20000004, LENGTH = 0x2FFFC
RAM_SHARED (xrw) : ORIGIN = 0x20030000, LENGTH = 10K
}
@@ -173,7 +173,6 @@ SECTIONS
{
__free_flash_start__ = .;
. = ORIGIN(FLASH) + LENGTH(FLASH);
- __free_flash_end__ = .;
} >FLASH
/* Remove information from the standard libraries */
diff --git a/firmware/targets/furi-hal-include/furi-hal-irda.h b/firmware/targets/furi-hal-include/furi-hal-irda.h
index 6e490402f37..260180d2630 100644
--- a/firmware/targets/furi-hal-include/furi-hal-irda.h
+++ b/firmware/targets/furi-hal-include/furi-hal-irda.h
@@ -7,8 +7,10 @@
extern "C" {
#endif
+#define IRDA_MAX_FREQUENCY 56000
+#define IRDA_MIN_FREQUENCY 10000
+
typedef enum {
- FuriHalIrdaTxGetDataStateError, /* An error occured during transmission */
FuriHalIrdaTxGetDataStateOk, /* New data obtained */
FuriHalIrdaTxGetDataStateDone, /* New data obtained, and this is end of package */
FuriHalIrdaTxGetDataStateLastDone, /* New data obtained, and this is end of package and no more data available */
@@ -103,10 +105,8 @@ void furi_hal_irda_async_tx_set_data_isr_callback(FuriHalIrdaTxGetDataISRCallbac
*
* @param[in] freq - frequency for PWM
* @param[in] duty_cycle - duty cycle for PWM
- * @return true if transmission successfully started, false otherwise.
- * If start failed no need to free resources.
*/
-bool furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle);
+void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle);
/**
* Stop IR asynchronous transmission and free resources.
diff --git a/firmware/targets/furi-hal-include/furi-hal-nfc.h b/firmware/targets/furi-hal-include/furi-hal-nfc.h
index aaed292434c..1ef9063d874 100644
--- a/firmware/targets/furi-hal-include/furi-hal-nfc.h
+++ b/firmware/targets/furi-hal-include/furi-hal-nfc.h
@@ -49,7 +49,12 @@ bool furi_hal_nfc_detect(rfalNfcDevice** dev_list, uint8_t* dev_cnt, uint32_t ti
/**
* NFC listen
*/
-bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t sak, uint32_t timeout);
+bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t sak, bool activate_after_sak, uint32_t timeout);
+
+/**
+ * Get first command from reader after activation in emulation mode
+ */
+bool furi_hal_nfc_get_first_frame(uint8_t** rx_buff, uint16_t** rx_len);
/**
* NFC data exchange
diff --git a/lib/ST25RFAL002/include/rfal_nfc.h b/lib/ST25RFAL002/include/rfal_nfc.h
index d8086d208f2..0500659b123 100755
--- a/lib/ST25RFAL002/include/rfal_nfc.h
+++ b/lib/ST25RFAL002/include/rfal_nfc.h
@@ -213,6 +213,8 @@ typedef struct{
bool wakeupEnabled; /*!< Enable Wake-Up mode before polling */
bool wakeupConfigDefault; /*!< Wake-Up mode default configuration */
rfalWakeUpConfig wakeupConfig; /*!< Wake-Up mode configuration */
+
+ bool activate_after_sak; // Set device to Active mode after SAK responce
}rfalNfcDiscoverParam;
diff --git a/lib/ST25RFAL002/source/rfal_nfc.c b/lib/ST25RFAL002/source/rfal_nfc.c
index a12cdcc97cf..96d3588929e 100755
--- a/lib/ST25RFAL002/source/rfal_nfc.c
+++ b/lib/ST25RFAL002/source/rfal_nfc.c
@@ -575,6 +575,7 @@ ReturnCode rfalNfcDataExchangeStart( uint8_t *txData, uint16_t txDataLen, uint8_
*rvdLen = (uint16_t*)&gNfcDev.rxLen;
*rxData = (uint8_t*)( (gNfcDev.activeDev->rfInterface == RFAL_NFC_INTERFACE_ISODEP) ? gNfcDev.rxBuf.isoDepBuf.apdu :
((gNfcDev.activeDev->rfInterface == RFAL_NFC_INTERFACE_NFCDEP) ? gNfcDev.rxBuf.nfcDepBuf.pdu : gNfcDev.rxBuf.rfBuf));
+ gNfcDev.state = RFAL_NFC_STATE_DATAEXCHANGE_DONE;
return ERR_NONE;
}
@@ -1579,6 +1580,7 @@ static ReturnCode rfalNfcListenActivation( void )
lmSt = rfalListenGetState( &isDataRcvd, &bitRate );
+
switch(lmSt)
{
@@ -1595,6 +1597,12 @@ static ReturnCode rfalNfcListenActivation( void )
/* Set the Listen Mode in Sleep state */
EXIT_ON_ERR( ret, rfalListenSleepStart( RFAL_LM_STATE_SLEEP_A, gNfcDev.rxBuf.rfBuf, sizeof(gNfcDev.rxBuf.rfBuf), &gNfcDev.rxLen ) );
}
+
+ else if(gNfcDev.disc.activate_after_sak) {
+ gNfcDev.devList->type = RFAL_NFC_POLL_TYPE_NFCA;
+ rfalListenSetState(RFAL_LM_STATE_ACTIVE_A);
+ return ERR_NONE;
+ }
#if RFAL_FEATURE_ISO_DEP && RFAL_FEATURE_ISO_DEP_LISTEN
/* Check if received data is a valid RATS */
diff --git a/lib/STM32CubeWB b/lib/STM32CubeWB
index 1c15728a3c0..9e2dd9db125 160000
--- a/lib/STM32CubeWB
+++ b/lib/STM32CubeWB
@@ -1 +1 @@
-Subproject commit 1c15728a3c08e42919024e2a3781862f7d6c86d7
+Subproject commit 9e2dd9db125fa53e0ec59f807eb8a052ab922583
diff --git a/lib/app-scened-template/file-worker.c b/lib/app-scened-template/file-worker.c
index 3f1bb1752a2..52427aed62f 100644
--- a/lib/app-scened-template/file-worker.c
+++ b/lib/app-scened-template/file-worker.c
@@ -1,5 +1,5 @@
#include "file-worker.h"
-#include "m-string.h"
+#include
#include
#include
#include
@@ -350,7 +350,7 @@ bool file_worker_read_until_buffered(
}
}
- if(max_length_exceeded) string_clear(str_result);
+ if(max_length_exceeded) string_clean(str_result);
return string_size(str_result) || *file_buf_cnt;
}
diff --git a/lib/irda/worker/irda_transmit.c b/lib/irda/worker/irda_transmit.c
index e87de6ca1f6..b27b18c074f 100644
--- a/lib/irda/worker/irda_transmit.c
+++ b/lib/irda/worker/irda_transmit.c
@@ -38,7 +38,6 @@ FuriHalIrdaTxGetDataState irda_get_raw_data_callback (void* context, uint32_t* d
void irda_send_raw_ext(const uint32_t timings[], uint32_t timings_cnt, bool start_from_mark, uint32_t frequency, float duty_cycle) {
furi_assert(timings);
- furi_assert(timings_cnt > 1);
irda_tx_raw_start_from_mark = start_from_mark;
irda_tx_raw_timings_index = 0;
@@ -56,7 +55,7 @@ void irda_send_raw(const uint32_t timings[], uint32_t timings_cnt, bool start_fr
}
FuriHalIrdaTxGetDataState irda_get_data_callback (void* context, uint32_t* duration, bool* level) {
- FuriHalIrdaTxGetDataState state = FuriHalIrdaTxGetDataStateError;
+ FuriHalIrdaTxGetDataState state = FuriHalIrdaTxGetDataStateLastDone;
IrdaEncoderHandler* handler = context;
IrdaStatus status = IrdaStatusError;
@@ -65,7 +64,9 @@ FuriHalIrdaTxGetDataState irda_get_data_callback (void* context, uint32_t* durat
}
if (status == IrdaStatusError) {
- state = FuriHalIrdaTxGetDataStateError;
+ state = FuriHalIrdaTxGetDataStateLastDone;
+ *duration = 0;
+ *level = 0;
} else if (status == IrdaStatusOk) {
state = FuriHalIrdaTxGetDataStateOk;
} else if (status == IrdaStatusDone) {
@@ -74,8 +75,7 @@ FuriHalIrdaTxGetDataState irda_get_data_callback (void* context, uint32_t* durat
state = FuriHalIrdaTxGetDataStateLastDone;
}
} else {
- furi_assert(0);
- state = FuriHalIrdaTxGetDataStateError;
+ furi_check(0);
}
return state;
@@ -90,8 +90,11 @@ void irda_send(const IrdaMessage* message, int times) {
irda_reset_encoder(handler, message);
irda_tx_number_of_transmissions = times;
+ uint32_t frequency = irda_get_protocol_frequency(message->protocol);
+ float duty_cycle = irda_get_protocol_duty_cycle(message->protocol);
+
furi_hal_irda_async_tx_set_data_isr_callback(irda_get_data_callback, handler);
- furi_hal_irda_async_tx_start(IRDA_COMMON_CARRIER_FREQUENCY, IRDA_COMMON_DUTY_CYCLE);
+ furi_hal_irda_async_tx_start(frequency, duty_cycle);
furi_hal_irda_async_tx_wait_termination();
irda_free_encoder(handler);
diff --git a/lib/irda/worker/irda_worker.c b/lib/irda/worker/irda_worker.c
index 041ea090c6c..62d4363f455 100644
--- a/lib/irda/worker/irda_worker.c
+++ b/lib/irda/worker/irda_worker.c
@@ -44,8 +44,9 @@ struct IrdaWorkerSignal{
size_t timings_cnt;
union {
IrdaMessage message;
- uint32_t timings[MAX_TIMINGS_AMOUNT];
- } data;
+ /* +1 is for pause we add at the beginning */
+ uint32_t timings[MAX_TIMINGS_AMOUNT + 1];
+ };
};
struct IrdaWorker {
@@ -125,7 +126,7 @@ static void irda_worker_process_timeout(IrdaWorker* instance) {
static void irda_worker_process_timings(IrdaWorker* instance, uint32_t duration, bool level) {
const IrdaMessage* message_decoded = irda_decode(instance->irda_decoder, level, duration);
if (message_decoded) {
- instance->signal.data.message = *message_decoded;
+ instance->signal.message = *message_decoded;
instance->signal.timings_cnt = 0;
instance->signal.decoded = true;
if (instance->rx.received_signal_callback)
@@ -137,7 +138,7 @@ static void irda_worker_process_timings(IrdaWorker* instance, uint32_t duration,
}
if (instance->signal.timings_cnt < MAX_TIMINGS_AMOUNT) {
- instance->signal.data.timings[instance->signal.timings_cnt] = duration;
+ instance->signal.timings[instance->signal.timings_cnt] = duration;
++instance->signal.timings_cnt;
} else {
uint32_t flags_set = osEventFlagsSet(instance->events, IRDA_WORKER_OVERRUN);
@@ -211,7 +212,7 @@ IrdaWorker* irda_worker_alloc() {
furi_thread_set_stack_size(instance->thread, 2048);
furi_thread_set_context(instance->thread, instance);
- size_t buffer_size = MAX(sizeof(IrdaWorkerTiming) * MAX_TIMINGS_AMOUNT, sizeof(LevelDuration) * MAX_TIMINGS_AMOUNT);
+ size_t buffer_size = MAX(sizeof(IrdaWorkerTiming) * (MAX_TIMINGS_AMOUNT + 1), sizeof(LevelDuration) * MAX_TIMINGS_AMOUNT);
instance->stream = xStreamBufferCreate(buffer_size, sizeof(IrdaWorkerTiming));
instance->irda_decoder = irda_alloc_decoder();
instance->irda_encoder = irda_alloc_encoder();
@@ -283,13 +284,13 @@ void irda_worker_get_raw_signal(const IrdaWorkerSignal* signal, const uint32_t**
furi_assert(timings);
furi_assert(timings_cnt);
- *timings = signal->data.timings;
+ *timings = signal->timings;
*timings_cnt = signal->timings_cnt;
}
const IrdaMessage* irda_worker_get_decoded_signal(const IrdaWorkerSignal* signal) {
furi_assert(signal);
- return &signal->data.message;
+ return &signal->message;
}
void irda_worker_rx_enable_blink_on_receiving(IrdaWorker* instance, bool enable) {
@@ -328,21 +329,24 @@ static FuriHalIrdaTxGetDataState irda_worker_furi_hal_data_isr_callback(void* co
furi_assert(level);
IrdaWorker* instance = context;
- IrdaWorkerTiming timing = {.state = FuriHalIrdaTxGetDataStateError} ;
+ IrdaWorkerTiming timing;
+ FuriHalIrdaTxGetDataState state;
if (sizeof(IrdaWorkerTiming) == xStreamBufferReceiveFromISR(instance->stream, &timing, sizeof(IrdaWorkerTiming), 0)) {
*level = timing.level;
*duration = timing.duration;
- furi_assert(timing.state != FuriHalIrdaTxGetDataStateError);
+ state = timing.state;
} else {
furi_assert(0);
- timing.state = FuriHalIrdaTxGetDataStateError;
+ *level = 0;
+ *duration = 100;
+ state = FuriHalIrdaTxGetDataStateDone;
}
uint32_t flags_set = osEventFlagsSet(instance->events, IRDA_WORKER_TX_FILL_BUFFER);
furi_check(flags_set & IRDA_WORKER_TX_FILL_BUFFER);
- return timing.state;
+ return state;
}
static bool irda_get_new_signal(IrdaWorker* instance) {
@@ -353,8 +357,8 @@ static bool irda_get_new_signal(IrdaWorker* instance) {
uint32_t new_tx_frequency = 0;
float new_tx_duty_cycle = 0;
if (instance->signal.decoded) {
- new_tx_frequency = irda_get_protocol_frequency(instance->signal.data.message.protocol);
- new_tx_duty_cycle = irda_get_protocol_duty_cycle(instance->signal.data.message.protocol);
+ new_tx_frequency = irda_get_protocol_frequency(instance->signal.message.protocol);
+ new_tx_duty_cycle = irda_get_protocol_duty_cycle(instance->signal.message.protocol);
} else {
furi_assert(instance->signal.timings_cnt > 1);
new_tx_frequency = IRDA_COMMON_CARRIER_FREQUENCY;
@@ -366,7 +370,7 @@ static bool irda_get_new_signal(IrdaWorker* instance) {
instance->tx.frequency = new_tx_frequency;
instance->tx.duty_cycle = new_tx_duty_cycle;
if (instance->signal.decoded) {
- irda_reset_encoder(instance->irda_encoder, &instance->signal.data.message);
+ irda_reset_encoder(instance->irda_encoder, &instance->signal.message);
}
new_signal_obtained = true;
} else if (response == IrdaWorkerGetSignalResponseSame) {
@@ -390,8 +394,8 @@ static bool irda_worker_tx_fill_buffer(IrdaWorker* instance) {
if (instance->signal.decoded) {
status = irda_encode(instance->irda_encoder, &timing.duration, &timing.level);
} else {
- timing.duration = instance->signal.data.timings[instance->tx.tx_raw_cnt];
-/* raw always starts from Mark, but we fulfill it with space delay at start */
+ timing.duration = instance->signal.timings[instance->tx.tx_raw_cnt];
+/* raw always starts from Mark, but we fill it with space delay at start */
timing.level = (instance->tx.tx_raw_cnt % 2);
++instance->tx.tx_raw_cnt;
if (instance->tx.tx_raw_cnt >= instance->signal.timings_cnt) {
@@ -532,16 +536,18 @@ void irda_worker_set_decoded_signal(IrdaWorker* instance, const IrdaMessage* mes
furi_assert(message);
instance->signal.decoded = true;
- instance->signal.data.message = *message;
+ instance->signal.message = *message;
}
void irda_worker_set_raw_signal(IrdaWorker* instance, const uint32_t* timings, size_t timings_cnt) {
furi_assert(instance);
furi_assert(timings);
- furi_assert(timings_cnt > 2);
+ furi_assert(timings_cnt > 0);
+ size_t max_copy_num = COUNT_OF(instance->signal.timings) - 1;
+ furi_check(timings_cnt <= max_copy_num);
- instance->signal.data.timings[0] = IRDA_RAW_TX_TIMING_DELAY_US;
- memcpy(&instance->signal.data.timings[1], timings, timings_cnt * sizeof(uint32_t));
+ instance->signal.timings[0] = IRDA_RAW_TX_TIMING_DELAY_US;
+ memcpy(&instance->signal.timings[1], timings, timings_cnt * sizeof(uint32_t));
instance->signal.decoded = false;
instance->signal.timings_cnt = timings_cnt + 1;
}
diff --git a/lib/nfc_protocols/mifare_ultralight.c b/lib/nfc_protocols/mifare_ultralight.c
index a96c2889595..39a93a0063c 100644
--- a/lib/nfc_protocols/mifare_ultralight.c
+++ b/lib/nfc_protocols/mifare_ultralight.c
@@ -137,3 +137,94 @@ uint16_t mf_ul_prepare_write(uint8_t* dest, uint16_t page_addr, uint32_t data) {
dest[5] = (uint8_t) data;
return 6;
}
+
+void mf_ul_prepare_emulation(MifareUlDevice* mf_ul_emulate, MifareUlData* data) {
+ mf_ul_emulate->data = *data;
+ mf_ul_emulate->data_changed = false;
+ if(data->version.storage_size == 0) {
+ mf_ul_emulate->type = MfUltralightTypeUnknown;
+ mf_ul_emulate->support_fast_read = false;
+ } else if(data->version.storage_size == 0x0B) {
+ mf_ul_emulate->type = MfUltralightTypeUL11;
+ mf_ul_emulate->support_fast_read = true;
+ } else if(data->version.storage_size == 0x0E) {
+ mf_ul_emulate->type = MfUltralightTypeUL21;
+ mf_ul_emulate->support_fast_read = true;
+ }
+}
+
+uint16_t mf_ul_prepare_emulation_response(uint8_t* buff_rx, uint16_t len_rx, uint8_t* buff_tx, MifareUlDevice* mf_ul_emulate) {
+ uint8_t cmd = buff_rx[0];
+ uint16_t page_num = mf_ul_emulate->data.data_size / 4;
+ uint16_t tx_len = 0;
+
+ if(cmd == MF_UL_GET_VERSION_CMD) {
+ if(mf_ul_emulate->type != MfUltralightTypeUnknown) {
+ tx_len = sizeof(mf_ul_emulate->data.version);
+ memcpy(buff_tx, &mf_ul_emulate->data.version, tx_len);
+ }
+ } else if(cmd == MF_UL_READ_CMD) {
+ uint8_t start_page = buff_rx[1];
+ if(start_page < page_num) {
+ tx_len = 16;
+ if(start_page + 4 > page_num) {
+ // Handle roll-over mechanism
+ uint8_t end_pages_num = page_num - start_page;
+ memcpy(buff_tx, &mf_ul_emulate->data.data[start_page * 4], end_pages_num * 4);
+ memcpy(&buff_tx[end_pages_num * 4], mf_ul_emulate->data.data, (4 - end_pages_num) * 4);
+ } else {
+ memcpy(buff_tx, &mf_ul_emulate->data.data[start_page * 4], tx_len);
+ }
+ }
+ } else if(cmd == MF_UL_FAST_READ_CMD) {
+ if(mf_ul_emulate->support_fast_read) {
+ uint8_t start_page = buff_rx[1];
+ uint8_t end_page = buff_rx[2];
+ if((start_page < page_num) &&
+ (end_page < page_num) && (start_page < end_page)) {
+ tx_len = (end_page - start_page) * 4;
+ memcpy(buff_tx, &mf_ul_emulate->data.data[start_page * 4], tx_len);
+ }
+ }
+ } else if(cmd == MF_UL_WRITE) {
+ uint8_t write_page = buff_rx[1];
+ if((write_page > 1) && (write_page < page_num - 2)) {
+ memcpy(&mf_ul_emulate->data.data[write_page * 4], &buff_rx[2], 4);
+ mf_ul_emulate->data_changed = true;
+ // TODO make 4-bit ACK
+ buff_tx[0] = 0x0A;
+ tx_len = 1;
+ }
+ } else if(cmd == MF_UL_READ_CNT) {
+ uint8_t cnt_num = buff_rx[1];
+ if(cnt_num < 3) {
+ buff_tx[0] = mf_ul_emulate->data.counter[cnt_num] >> 16;
+ buff_tx[1] = mf_ul_emulate->data.counter[cnt_num] >> 8;
+ buff_tx[2] = mf_ul_emulate->data.counter[cnt_num];
+ tx_len = 3;
+ }
+ } else if(cmd == MF_UL_INC_CNT) {
+ uint8_t cnt_num = buff_rx[1];
+ uint32_t inc = (buff_rx[2] | (buff_rx[3] << 8) | (buff_rx[4] << 16));
+ if((cnt_num < 3) && (mf_ul_emulate->data.counter[cnt_num] + inc < 0x00FFFFFF)) {
+ mf_ul_emulate->data.counter[cnt_num] += inc;
+ mf_ul_emulate->data_changed = true;
+ // TODO make 4-bit ACK
+ buff_tx[0] = 0x0A;
+ tx_len = 1;
+ }
+ } else if(cmd == MF_UL_READ_SIG) {
+ // Check 2nd byte = 0x00 - RFU
+ if(buff_rx[1] == 0x00) {
+ tx_len = sizeof(mf_ul_emulate->data.signature);
+ memcpy(buff_tx, mf_ul_emulate->data.signature, tx_len);
+ }
+ } else if(cmd == MF_UL_CHECK_TEARING) {
+ uint8_t cnt_num = buff_rx[1];
+ if(cnt_num < 3) {
+ buff_tx[0] = mf_ul_emulate->data.tearing[cnt_num];
+ tx_len = 1;
+ }
+ }
+ return tx_len;
+}
diff --git a/lib/nfc_protocols/mifare_ultralight.h b/lib/nfc_protocols/mifare_ultralight.h
index 83673a7ed13..7522f334edd 100644
--- a/lib/nfc_protocols/mifare_ultralight.h
+++ b/lib/nfc_protocols/mifare_ultralight.h
@@ -65,6 +65,7 @@ typedef struct {
uint8_t pages_to_read;
uint8_t pages_readed;
bool support_fast_read;
+ bool data_changed;
MifareUlData data;
} MifareUlDevice;
@@ -93,3 +94,5 @@ void mf_ul_parse_fast_read_response(uint8_t* buff, uint8_t start_page, uint8_t e
uint16_t mf_ul_prepare_write(uint8_t* dest, uint16_t page_addr, uint32_t data);
+void mf_ul_prepare_emulation(MifareUlDevice* mf_ul_emulate, MifareUlData* data);
+uint16_t mf_ul_prepare_emulation_response(uint8_t* buff_rx, uint16_t len_rx, uint8_t* buff_tx, MifareUlDevice* mf_ul_emulate);
diff --git a/lib/subghz/protocols/subghz_protocol.h b/lib/subghz/protocols/subghz_protocol.h
index 3c33b8143e6..f4a86c0b3b8 100644
--- a/lib/subghz/protocols/subghz_protocol.h
+++ b/lib/subghz/protocols/subghz_protocol.h
@@ -41,7 +41,7 @@ void subghz_protocol_enable_dump_text(SubGhzProtocol* instance, SubGhzProtocolTe
* @param callback - SubGhzProtocolTextCallback callback
* @param context
*/
-void subghz_protocol_enable_dump( SubGhzProtocol* instance, SubGhzProtocolCommonCallbackDump callback, void* context);
+void subghz_protocol_enable_dump(SubGhzProtocol* instance, SubGhzProtocolCommonCallbackDump callback, void* context);
/** File name rainbow table Nice Flor-S
*
diff --git a/lib/subghz/protocols/subghz_protocol_came.c b/lib/subghz/protocols/subghz_protocol_came.c
index 7af2f6dc5f1..330a1509412 100644
--- a/lib/subghz/protocols/subghz_protocol_came.c
+++ b/lib/subghz/protocols/subghz_protocol_came.c
@@ -14,16 +14,19 @@ struct SubGhzProtocolCame {
SubGhzProtocolCame* subghz_protocol_came_alloc() {
SubGhzProtocolCame* instance = furi_alloc(sizeof(SubGhzProtocolCame));
- instance->common.name = "Came";
+ instance->common.name = "CAME";
instance->common.code_min_count_bit_for_found = 12;
- instance->common.te_shot = 320;
+ instance->common.te_short = 320;
instance->common.te_long = 640;
instance->common.te_delta = 150;
- instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_came_to_str;
+ instance->common.type_protocol = TYPE_PROTOCOL_STATIC;
+ instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_came_to_str;
instance->common.to_save_string =
(SubGhzProtocolCommonGetStrSave)subghz_protocol_came_to_save_str;
instance->common.to_load_protocol=
(SubGhzProtocolCommonLoad)subghz_protocol_came_to_load_protocol;
+ instance->common.get_upload_protocol =
+ (SubGhzProtocolEncoderCommonGetUpLoad)subghz_protocol_came_send_key;
return instance;
}
@@ -33,39 +36,29 @@ void subghz_protocol_came_free(SubGhzProtocolCame* instance) {
free(instance);
}
-/** Send bit
- *
- * @param instance - SubGhzProtocolCame instance
- * @param bit - bit
- */
-void subghz_protocol_came_send_bit(SubGhzProtocolCame* instance, uint8_t bit) {
- if (bit) {
- //send bit 1
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_long);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- } else {
- //send bit 0
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_long);
- }
-}
-
-void subghz_protocol_came_send_key(SubGhzProtocolCame* instance, uint64_t key, uint8_t bit, uint8_t repeat) {
- while (repeat--) {
- //Send header
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot * 34); //+2 interval v bit 1
- //Send start bit
- subghz_protocol_came_send_bit(instance, 1);
- //Send key data
- for (uint8_t i = bit; i > 0; i--) {
- subghz_protocol_came_send_bit(instance, bit_read(key, i - 1));
+bool subghz_protocol_came_send_key(SubGhzProtocolCame* instance, SubGhzProtocolEncoderCommon* encoder){
+ furi_assert(instance);
+ furi_assert(encoder);
+ size_t index = 0;
+ encoder->size_upload =(instance->common.code_last_count_bit * 2) + 2;
+ if(encoder->size_upload > SUBGHZ_ENCODER_UPLOAD_MAX_SIZE) return false;
+ //Send header
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short * 36);
+ //Send start bit
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ //Send key data
+ for (uint8_t i = instance->common.code_last_count_bit; i > 0; i--) {
+ if(bit_read(instance->common.code_last_found, i - 1)){
+ //send bit 1
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_long);
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ }else{
+ //send bit 0
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_long);
}
}
+ return true;
}
void subghz_protocol_came_reset(SubGhzProtocolCame* instance) {
@@ -76,7 +69,7 @@ void subghz_protocol_came_parse(SubGhzProtocolCame* instance, bool level, uint32
switch (instance->common.parser_step) {
case 0:
if ((!level)
- && (DURATION_DIFF(duration, instance->common.te_shot * 51)< instance->common.te_delta * 51)) { //Need protocol 36 te_shot
+ && (DURATION_DIFF(duration, instance->common.te_short * 51)< instance->common.te_delta * 51)) { //Need protocol 36 te_short
//Found header CAME
instance->common.parser_step = 1;
} else {
@@ -86,7 +79,7 @@ void subghz_protocol_came_parse(SubGhzProtocolCame* instance, bool level, uint32
case 1:
if (!level) {
break;
- } else if (DURATION_DIFF(duration, instance->common.te_shot)< instance->common.te_delta) {
+ } else if (DURATION_DIFF(duration, instance->common.te_short)< instance->common.te_delta) {
//Found start bit CAME
instance->common.parser_step = 2;
instance->common.code_found = 0;
@@ -97,7 +90,7 @@ void subghz_protocol_came_parse(SubGhzProtocolCame* instance, bool level, uint32
break;
case 2:
if (!level) { //save interval
- if (duration >= (instance->common.te_shot * 4)) {
+ if (duration >= (instance->common.te_short * 4)) {
instance->common.parser_step = 1;
if (instance->common.code_count_bit>= instance->common.code_min_count_bit_for_found) {
@@ -122,12 +115,12 @@ void subghz_protocol_came_parse(SubGhzProtocolCame* instance, bool level, uint32
break;
case 3:
if (level) {
- if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot) < instance->common.te_delta)
+ if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short) < instance->common.te_delta)
&& (DURATION_DIFF(duration, instance->common.te_long)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 2;
} else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_long)< instance->common.te_delta)
- && (DURATION_DIFF(duration, instance->common.te_shot)< instance->common.te_delta)) {
+ && (DURATION_DIFF(duration, instance->common.te_short)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 2;
} else
@@ -140,25 +133,21 @@ void subghz_protocol_came_parse(SubGhzProtocolCame* instance, bool level, uint32
}
void subghz_protocol_came_to_str(SubGhzProtocolCame* instance, string_t output) {
- uint32_t code_found_hi = instance->common.code_last_found >> 32;
uint32_t code_found_lo = instance->common.code_last_found & 0x00000000ffffffff;
uint64_t code_found_reverse = subghz_protocol_common_reverse_key(
instance->common.code_last_found, instance->common.code_last_count_bit);
- uint32_t code_found_reverse_hi = code_found_reverse >> 32;
uint32_t code_found_reverse_lo = code_found_reverse & 0x00000000ffffffff;
string_cat_printf(
output,
"%s %d Bit\r\n"
- " KEY:0x%lX%08lX\r\n"
- " YEK:0x%lX%08lX\r\n",
+ " KEY:0x%08lX\r\n"
+ " YEK:0x%08lX\r\n",
instance->common.name,
instance->common.code_last_count_bit,
- code_found_hi,
code_found_lo,
- code_found_reverse_hi,
code_found_reverse_lo
);
}
diff --git a/lib/subghz/protocols/subghz_protocol_came.h b/lib/subghz/protocols/subghz_protocol_came.h
index 42c1b9a31d0..24810da4f15 100644
--- a/lib/subghz/protocols/subghz_protocol_came.h
+++ b/lib/subghz/protocols/subghz_protocol_came.h
@@ -16,14 +16,13 @@ SubGhzProtocolCame* subghz_protocol_came_alloc();
*/
void subghz_protocol_came_free(SubGhzProtocolCame* instance);
-/** Sends the key on the air
+/** Get upload protocol
*
* @param instance - SubGhzProtocolCame instance
- * @param key - key send
- * @param bit - count bit key
- * @param repeat - repeat send key
+ * @param encoder - SubGhzProtocolEncoderCommon encoder
+ * @return bool
*/
-void subghz_protocol_came_send_key(SubGhzProtocolCame* instance, uint64_t key, uint8_t bit, uint8_t repeat);
+bool subghz_protocol_came_send_key(SubGhzProtocolCame* instance, SubGhzProtocolEncoderCommon* encoder);
/** Reset internal state
* @param instance - SubGhzProtocolCame instance
diff --git a/lib/subghz/protocols/subghz_protocol_common.c b/lib/subghz/protocols/subghz_protocol_common.c
index 97ded06ed3b..2c5f4f2eaff 100644
--- a/lib/subghz/protocols/subghz_protocol_common.c
+++ b/lib/subghz/protocols/subghz_protocol_common.c
@@ -1,12 +1,50 @@
#include "subghz_protocol_common.h"
#include
+#include
+
+
+SubGhzProtocolEncoderCommon* subghz_protocol_encoder_common_alloc() {
+ SubGhzProtocolEncoderCommon* instance = furi_alloc(sizeof(SubGhzProtocolEncoderCommon));
+ instance->upload = furi_alloc(SUBGHZ_ENCODER_UPLOAD_MAX_SIZE * sizeof(LevelDuration));
+ instance->start = true;
+ instance->repeat = 10; //default number of repeat
+ return instance;
+}
+
+void subghz_protocol_encoder_common_free(SubGhzProtocolEncoderCommon* instance) {
+ furi_assert(instance);
+ free(instance->upload);
+ free(instance);
+}
+
+size_t subghz_encoder_common_get_repeat_left(SubGhzProtocolEncoderCommon* instance) {
+ furi_assert(instance);
+ return instance->repeat;
+}
+
+LevelDuration subghz_protocol_encoder_common_yield(void* context) {
+ SubGhzProtocolEncoderCommon* instance = context;
+
+ if(instance->repeat == 0){
+ return level_duration_reset();
+ }
+
+ LevelDuration ret = instance->upload[instance->front];
+
+ if(++instance->front == instance->size_upload) {
+ instance->repeat--;
+ instance->front = 0;
+ }
+
+ return ret;
+}
void subghz_protocol_common_add_bit(SubGhzProtocolCommon *common, uint8_t bit){
- common->code_found = common->code_found <<1 | bit;
+ common->code_found = common->code_found << 1 | bit;
common->code_count_bit++;
}
-bool subghz_protocol_common_check_interval (SubGhzProtocolCommon *common, uint32_t duration, uint16_t duration_check) {
+bool subghz_protocol_common_check_interval(SubGhzProtocolCommon *common, uint32_t duration, uint16_t duration_check) {
if ((duration_check >= (duration - common->te_delta))&&(duration_check <= (duration + common->te_delta))){
return true;
} else {
@@ -75,3 +113,27 @@ void subghz_protocol_common_to_str(SubGhzProtocolCommon* instance, string_t outp
}
}
}
+
+bool subghz_protocol_common_read_hex(string_t str, uint8_t* buff, uint16_t len) {
+ string_strim(str);
+ uint8_t nibble_high = 0;
+ uint8_t nibble_low = 0;
+ bool parsed = true;
+
+ for(uint16_t i = 0; i < len; i++) {
+ if(hex_char_to_hex_nibble(string_get_char(str, 0), &nibble_high) &&
+ hex_char_to_hex_nibble(string_get_char(str, 1), &nibble_low)) {
+ buff[i] = (nibble_high << 4) | nibble_low;
+ if(string_size(str)>2){
+ string_right(str, 2);
+ }else if(icommon.name = "Faac SLH";
instance->common.code_min_count_bit_for_found = 64;
- instance->common.te_shot = 255;
+ instance->common.te_short = 255;
instance->common.te_long = 595;
instance->common.te_delta = 100;
+ instance->common.type_protocol = TYPE_PROTOCOL_DYNAMIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_faac_slh_to_str;
return instance;
@@ -31,14 +32,14 @@ void subghz_protocol_faac_slh_free(SubGhzProtocolFaacSLH* instance) {
void subghz_protocol_faac_slh_send_bit(SubGhzProtocolFaacSLH* instance, uint8_t bit) {
if (bit) {
//send bit 1
- SUBGHZ_TX_PIN_HIGTH();
+ SUBGHZ_TX_PIN_HIGH();
delay_us(instance->common.te_long);
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
+ delay_us(instance->common.te_short);
} else {
//send bit 0
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
+ SUBGHZ_TX_PIN_HIGH();
+ delay_us(instance->common.te_short);
SUBGHZ_TX_PIN_LOW();
delay_us(instance->common.te_long);
}
@@ -46,7 +47,7 @@ void subghz_protocol_faac_slh_send_bit(SubGhzProtocolFaacSLH* instance, uint8_t
void subghz_protocol_faac_slh_send_key(SubGhzProtocolFaacSLH* instance, uint64_t key, uint8_t bit,uint8_t repeat) {
while (repeat--) {
- SUBGHZ_TX_PIN_HIGTH();
+ SUBGHZ_TX_PIN_HIGH();
//Send header
delay_us(instance->common.te_long * 2);
SUBGHZ_TX_PIN_LOW();
@@ -67,15 +68,12 @@ void subghz_protocol_faac_slh_reset(SubGhzProtocolFaacSLH* instance) {
* @param instance SubGhzProtocolFaacSLH instance
*/
void subghz_protocol_faac_slh_check_remote_controller(SubGhzProtocolFaacSLH* instance) {
- uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_found, instance->common.code_count_bit);
+ uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_last_found, instance->common.code_last_count_bit);
uint32_t code_fix = code_found_reverse & 0xFFFFFFFF;
//uint32_t code_hop = (code_found_reverse >> 24) & 0xFFFFF;
instance->common.serial = code_fix & 0xFFFFFFF;
instance->common.btn = (code_fix >> 28) & 0x0F;
-
- if (instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
-
}
void subghz_protocol_faac_slh_parse(SubGhzProtocolFaacSLH* instance, bool level, uint32_t duration) {
@@ -101,10 +99,12 @@ void subghz_protocol_faac_slh_parse(SubGhzProtocolFaacSLH* instance, bool level,
break;
case 2:
if (level) {
- if (duration >= (instance->common.te_shot * 3 + instance->common.te_delta)) {
+ if (duration >= (instance->common.te_short * 3 + instance->common.te_delta)) {
instance->common.parser_step = 1;
if (instance->common.code_count_bit>= instance->common.code_min_count_bit_for_found) {
- subghz_protocol_faac_slh_check_remote_controller(instance);
+ instance->common.code_last_found = instance->common.code_found;
+ instance->common.code_last_count_bit = instance->common.code_count_bit;
+ if (instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
}
instance->common.code_found = 0;
instance->common.code_count_bit = 0;
@@ -120,12 +120,12 @@ void subghz_protocol_faac_slh_parse(SubGhzProtocolFaacSLH* instance, bool level,
break;
case 3:
if(!level){
- if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot)< instance->common.te_delta)
+ if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short)< instance->common.te_delta)
&& (DURATION_DIFF(duration,instance->common.te_long)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 2;
} else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_long )< instance->common.te_delta)
- && (DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta)) {
+ && (DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 2;
} else {
@@ -139,23 +139,21 @@ void subghz_protocol_faac_slh_parse(SubGhzProtocolFaacSLH* instance, bool level,
}
void subghz_protocol_faac_slh_to_str(SubGhzProtocolFaacSLH* instance, string_t output) {
-
- uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_found, instance->common.code_count_bit);
+ subghz_protocol_faac_slh_check_remote_controller(instance);
+ uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_last_found, instance->common.code_last_count_bit);
uint32_t code_fix = code_found_reverse & 0xFFFFFFFF;
uint32_t code_hop = (code_found_reverse >>32) & 0xFFFFFFFF;
- //uint32_t rev_hi =
-
string_cat_printf(output,
- "Protocol %s, %d Bit\r\n"
+ "%s, %d Bit\r\n"
" KEY:0x%lX%08lX\r\n"
" FIX:%08lX \r\n"
" HOP:%08lX \r\n"
" SN:%07lX BTN:%lX\r\n",
instance->common.name,
- instance->common.code_count_bit,
- (uint32_t)(instance->common.code_found >> 32),
- (uint32_t)instance->common.code_found,
+ instance->common.code_last_count_bit,
+ (uint32_t)(instance->common.code_last_found >> 32),
+ (uint32_t)instance->common.code_last_found,
code_fix, code_hop,
instance->common.serial,
instance->common.btn);
diff --git a/lib/subghz/protocols/subghz_protocol_gate_tx.c b/lib/subghz/protocols/subghz_protocol_gate_tx.c
index cfd01db080c..d850d741ac1 100644
--- a/lib/subghz/protocols/subghz_protocol_gate_tx.c
+++ b/lib/subghz/protocols/subghz_protocol_gate_tx.c
@@ -10,15 +10,17 @@ SubGhzProtocolGateTX* subghz_protocol_gate_tx_alloc(void) {
instance->common.name = "GateTX";
instance->common.code_min_count_bit_for_found = 24;
- instance->common.te_shot = 350;
+ instance->common.te_short = 350;
instance->common.te_long = 700;
instance->common.te_delta = 100;
+ instance->common.type_protocol = TYPE_PROTOCOL_STATIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_gate_tx_to_str;
instance->common.to_save_string =
(SubGhzProtocolCommonGetStrSave)subghz_protocol_gate_tx_to_save_str;
instance->common.to_load_protocol=
(SubGhzProtocolCommonLoad)subghz_protocol_gate_tx_to_load_protocol;
-
+ instance->common.get_upload_protocol =
+ (SubGhzProtocolEncoderCommonGetUpLoad)subghz_protocol_gate_tx_send_key;
return instance;
}
@@ -27,40 +29,29 @@ void subghz_protocol_gate_tx_free(SubGhzProtocolGateTX* instance) {
free(instance);
}
-/** Send bit
- *
- * @param instance - SubGhzProtocolGateTX instance
- * @param bit - bit
- */
-void subghz_protocol_gate_tx_send_bit(SubGhzProtocolGateTX* instance, uint8_t bit) {
- if (bit) {
- //send bit 1
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_long);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- } else {
- //send bit 0
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_long);
- }
-}
-
-void subghz_protocol_gate_tx_send_key(SubGhzProtocolGateTX* instance, uint64_t key, uint8_t bit,uint8_t repeat) {
- while (repeat--) {
- //Send header
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot * 47); //+2 interval v bit 1
- //Send start bit
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_long);
- //Send key data
- for (uint8_t i = bit; i > 0; i--) {
- subghz_protocol_gate_tx_send_bit(instance, bit_read(key, i - 1));
+bool subghz_protocol_gate_tx_send_key(SubGhzProtocolGateTX* instance, SubGhzProtocolEncoderCommon* encoder){
+ furi_assert(instance);
+ furi_assert(encoder);
+ size_t index = 0;
+ encoder->size_upload =(instance->common.code_last_count_bit * 2) + 2;
+ if(encoder->size_upload > SUBGHZ_ENCODER_UPLOAD_MAX_SIZE) return false;
+ //Send header
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short * 49);
+ //Send start bit
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_long);
+ //Send key data
+ for (uint8_t i = instance->common.code_last_count_bit; i > 0; i--) {
+ if(bit_read(instance->common.code_last_found, i - 1)){
+ //send bit 1
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_long);
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ }else{
+ //send bit 0
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_long);
}
}
+ return true;
}
void subghz_protocol_gate_tx_reset(SubGhzProtocolGateTX* instance) {
@@ -82,7 +73,7 @@ void subghz_protocol_gate_tx_parse(SubGhzProtocolGateTX* instance, bool level, u
switch (instance->common.parser_step) {
case 0:
if ((!level)
- && (DURATION_DIFF(duration,instance->common.te_shot * 47)< instance->common.te_delta * 47)) {
+ && (DURATION_DIFF(duration,instance->common.te_short * 47)< instance->common.te_delta * 47)) {
//Found Preambula
instance->common.parser_step = 1;
} else {
@@ -101,7 +92,7 @@ void subghz_protocol_gate_tx_parse(SubGhzProtocolGateTX* instance, bool level, u
break;
case 2:
if (!level) {
- if (duration >= (instance->common.te_shot * 10 + instance->common.te_delta)) {
+ if (duration >= (instance->common.te_short * 10 + instance->common.te_delta)) {
instance->common.parser_step = 1;
if (instance->common.code_count_bit>= instance->common.code_min_count_bit_for_found) {
@@ -121,12 +112,12 @@ void subghz_protocol_gate_tx_parse(SubGhzProtocolGateTX* instance, bool level, u
break;
case 3:
if(level){
- if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot)< instance->common.te_delta)
+ if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short)< instance->common.te_delta)
&& (DURATION_DIFF(duration,instance->common.te_long)< instance->common.te_delta*3)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 2;
} else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_long)< instance->common.te_delta*3)
- && (DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta)) {
+ && (DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 2;
} else {
diff --git a/lib/subghz/protocols/subghz_protocol_gate_tx.h b/lib/subghz/protocols/subghz_protocol_gate_tx.h
index c02a8c45d18..b5682d7d2d5 100644
--- a/lib/subghz/protocols/subghz_protocol_gate_tx.h
+++ b/lib/subghz/protocols/subghz_protocol_gate_tx.h
@@ -16,14 +16,13 @@ SubGhzProtocolGateTX* subghz_protocol_gate_tx_alloc();
*/
void subghz_protocol_gate_tx_free(SubGhzProtocolGateTX* instance);
-/** Sends the key on the air
+/** Get upload protocol
*
- * @param instance - SubGhzProtocolGateTX instance
- * @param key - key send
- * @param bit - count bit key
- * @param repeat - repeat send key
+ * @param instance - SubGhzProtocolCame instance
+ * @param encoder - SubGhzProtocolEncoderCommon encoder
+ * @return bool
*/
-void subghz_protocol_gate_tx_send_key(SubGhzProtocolGateTX* instance, uint64_t key, uint8_t bit, uint8_t repeat);
+bool subghz_protocol_gate_tx_send_key(SubGhzProtocolGateTX* instance, SubGhzProtocolEncoderCommon* encoder);
/** Reset internal state
* @param instance - SubGhzProtocolGateTX instance
diff --git a/lib/subghz/protocols/subghz_protocol_ido.c b/lib/subghz/protocols/subghz_protocol_ido.c
index 7b95061a90e..95e571e37ae 100644
--- a/lib/subghz/protocols/subghz_protocol_ido.c
+++ b/lib/subghz/protocols/subghz_protocol_ido.c
@@ -10,9 +10,10 @@ SubGhzProtocolIDo* subghz_protocol_ido_alloc(void) {
instance->common.name = "iDo 117/111"; // PT4301-X";
instance->common.code_min_count_bit_for_found = 48;
- instance->common.te_shot = 450;
+ instance->common.te_short = 450;
instance->common.te_long = 1450;
instance->common.te_delta = 150;
+ instance->common.type_protocol = TYPE_PROTOCOL_DYNAMIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_ido_to_str;
return instance;
@@ -31,14 +32,14 @@ void subghz_protocol_ido_free(SubGhzProtocolIDo* instance) {
void subghz_protocol_ido_send_bit(SubGhzProtocolIDo* instance, uint8_t bit) {
if (bit) {
//send bit 1
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
+ SUBGHZ_TX_PIN_HIGH();
+ delay_us(instance->common.te_short);
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
+ delay_us(instance->common.te_short);
} else {
//send bit 0
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
+ SUBGHZ_TX_PIN_HIGH();
+ delay_us(instance->common.te_short);
SUBGHZ_TX_PIN_LOW();
delay_us(instance->common.te_long);
}
@@ -46,11 +47,11 @@ void subghz_protocol_ido_send_bit(SubGhzProtocolIDo* instance, uint8_t bit) {
void subghz_protocol_ido_send_key(SubGhzProtocolIDo* instance, uint64_t key, uint8_t bit,uint8_t repeat) {
while (repeat--) {
- SUBGHZ_TX_PIN_HIGTH();
+ SUBGHZ_TX_PIN_HIGH();
//Send header
- delay_us(instance->common.te_shot * 10);
+ delay_us(instance->common.te_short * 10);
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot * 10);
+ delay_us(instance->common.te_short * 10);
//Send key data
for (uint8_t i = bit; i > 0; i--) {
subghz_protocol_ido_send_bit(instance, bit_read(key, i - 1));
@@ -67,22 +68,18 @@ void subghz_protocol_ido_reset(SubGhzProtocolIDo* instance) {
* @param instance SubGhzProtocolIDo instance
*/
void subghz_protocol_ido_check_remote_controller(SubGhzProtocolIDo* instance) {
- uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_found, instance->common.code_count_bit);
+ uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_last_found, instance->common.code_last_count_bit);
uint32_t code_fix = code_found_reverse & 0xFFFFFF;
- //uint32_t code_hop = (code_found_reverse >> 24) & 0xFFFFF;
instance->common.serial = code_fix & 0xFFFFF;
instance->common.btn = (code_fix >> 20) & 0x0F;
-
- if (instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
-
}
void subghz_protocol_ido_parse(SubGhzProtocolIDo* instance, bool level, uint32_t duration) {
switch (instance->common.parser_step) {
case 0:
if ((level)
- && (DURATION_DIFF(duration,instance->common.te_shot * 10)< instance->common.te_delta * 5)) {
+ && (DURATION_DIFF(duration,instance->common.te_short * 10)< instance->common.te_delta * 5)) {
instance->common.parser_step = 1;
} else {
instance->common.parser_step = 0;
@@ -90,7 +87,7 @@ void subghz_protocol_ido_parse(SubGhzProtocolIDo* instance, bool level, uint32_t
break;
case 1:
if ((!level)
- && (DURATION_DIFF(duration,instance->common.te_shot * 10)< instance->common.te_delta * 5)) {
+ && (DURATION_DIFF(duration,instance->common.te_short * 10)< instance->common.te_delta * 5)) {
//Found Preambula
instance->common.parser_step = 2;
instance->common.code_found = 0;
@@ -101,10 +98,12 @@ void subghz_protocol_ido_parse(SubGhzProtocolIDo* instance, bool level, uint32_t
break;
case 2:
if (level) {
- if (duration >= (instance->common.te_shot * 5 + instance->common.te_delta)) {
+ if (duration >= (instance->common.te_short * 5 + instance->common.te_delta)) {
instance->common.parser_step = 1;
if (instance->common.code_count_bit>= instance->common.code_min_count_bit_for_found) {
- subghz_protocol_ido_check_remote_controller(instance);
+ instance->common.code_last_found = instance->common.code_found;
+ instance->common.code_last_count_bit = instance->common.code_count_bit;
+ if (instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
}
instance->common.code_found = 0;
instance->common.code_count_bit = 0;
@@ -120,12 +119,12 @@ void subghz_protocol_ido_parse(SubGhzProtocolIDo* instance, bool level, uint32_t
break;
case 3:
if(!level){
- if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot)< instance->common.te_delta)
+ if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short)< instance->common.te_delta)
&& (DURATION_DIFF(duration,instance->common.te_long)< instance->common.te_delta*3)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 2;
- } else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot )< instance->common.te_delta*3)
- && (DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta)) {
+ } else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short )< instance->common.te_delta*3)
+ && (DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 2;
} else {
@@ -139,21 +138,21 @@ void subghz_protocol_ido_parse(SubGhzProtocolIDo* instance, bool level, uint32_t
}
void subghz_protocol_ido_to_str(SubGhzProtocolIDo* instance, string_t output) {
-
- uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_found, instance->common.code_count_bit);
+ subghz_protocol_ido_check_remote_controller(instance);
+ uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_last_found, instance->common.code_last_count_bit);
uint32_t code_fix = code_found_reverse & 0xFFFFFF;
uint32_t code_hop = (code_found_reverse >>24) & 0xFFFFFF;
string_cat_printf(output,
- "Protocol %s, %d Bit\r\n"
+ "%s, %d Bit\r\n"
" KEY:0x%lX%08lX\r\n"
" FIX:%06lX \r\n"
" HOP:%06lX \r\n"
" SN:%05lX BTN:%lX\r\n",
instance->common.name,
- instance->common.code_count_bit,
- (uint32_t)(instance->common.code_found >> 32),
- (uint32_t)instance->common.code_found,
+ instance->common.code_last_count_bit,
+ (uint32_t)(instance->common.code_last_found >> 32),
+ (uint32_t)instance->common.code_last_found,
code_fix, code_hop,
instance->common.serial,
instance->common.btn);
diff --git a/lib/subghz/protocols/subghz_protocol_keeloq.c b/lib/subghz/protocols/subghz_protocol_keeloq.c
index 878e17bc6ad..6bbc9c80909 100644
--- a/lib/subghz/protocols/subghz_protocol_keeloq.c
+++ b/lib/subghz/protocols/subghz_protocol_keeloq.c
@@ -20,14 +20,17 @@ SubGhzProtocolKeeloq* subghz_protocol_keeloq_alloc(SubGhzKeystore* keystore) {
instance->common.name = "KeeLoq";
instance->common.code_min_count_bit_for_found = 64;
- instance->common.te_shot = 400;
+ instance->common.te_short = 400;
instance->common.te_long = 800;
instance->common.te_delta = 140;
+ instance->common.type_protocol = TYPE_PROTOCOL_DYNAMIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_keeloq_to_str;
instance->common.to_save_string =
(SubGhzProtocolCommonGetStrSave)subghz_protocol_keeloq_to_save_str;
instance->common.to_load_protocol =
(SubGhzProtocolCommonLoad)subghz_protocol_keeloq_to_load_protocol;
+ instance->common.get_upload_protocol =
+ (SubGhzProtocolEncoderCommonGetUpLoad)subghz_protocol_keeloq_send_key;
return instance;
}
@@ -162,53 +165,91 @@ void subghz_protocol_keeloq_check_remote_controller(SubGhzProtocolKeeloq* instan
instance->common.serial = key_fix & 0x0FFFFFFF;
instance->common.btn = key_fix >> 28;
}
-
-/** Send bit
- *
- * @param instance - SubGhzProtocolKeeloq instance
- * @param bit - bit
- */
-void subghz_protocol_keeloq_send_bit(SubGhzProtocolKeeloq* instance, uint8_t bit) {
- if(bit) {
- // send bit 1
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_long);
- } else {
- // send bit 0
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_long);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
- }
+void subghz_protocol_keeloq_set_manufacture_name (void* context, const char* manufacture_name){
+ SubGhzProtocolKeeloq* instance = context;
+ instance->manufacture_name = manufacture_name;
}
-void subghz_protocol_keeloq_send_key(
- SubGhzProtocolKeeloq* instance,
- uint64_t key,
- uint8_t bit,
- uint8_t repeat) {
- while(repeat--) {
- // Send header
- for(uint8_t i = 11; i > 0; i--) {
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
+uint64_t subghz_protocol_keeloq_gen_key(void* context) {
+ SubGhzProtocolKeeloq* instance = context;
+ uint32_t fix = instance->common.btn << 28 | instance->common.serial;
+ uint32_t decrypt = instance->common.btn << 28 | (instance->common.serial & 0x3FF) << 16 |
+ instance->common.cnt;
+ uint32_t hop = 0;
+ uint64_t man_normal_learning = 0;
+ int res = 0;
+
+ for
+ M_EACH(manufacture_code, *subghz_keystore_get_data(instance->keystore), SubGhzKeyArray_t) {
+ res = strcmp(string_get_cstr(manufacture_code->name), instance->manufacture_name);
+ if(res == 0) {
+ switch(manufacture_code->type) {
+ case KEELOQ_LEARNING_SIMPLE:
+ //Simple Learning
+ hop = subghz_protocol_keeloq_common_encrypt(decrypt, manufacture_code->key);
+ break;
+ case KEELOQ_LEARNING_NORMAL:
+ //Simple Learning
+ man_normal_learning =
+ subghz_protocol_keeloq_common_normal_learning(fix, manufacture_code->key);
+ hop = subghz_protocol_keeloq_common_encrypt(decrypt, man_normal_learning);
+ break;
+ case KEELOQ_LEARNING_UNKNOWN:
+ hop = 0; //todo
+ break;
+ }
+ break;
+ }
}
- delay_us(instance->common.te_shot * 9); //+1 up Send header
+ uint64_t yek = (uint64_t)fix << 32 | hop;
+ return subghz_protocol_common_reverse_key(yek, instance->common.code_last_count_bit);
+}
- for(uint8_t i = bit; i > 0; i--) {
- subghz_protocol_keeloq_send_bit(instance, bit_read(key, i - 1));
+bool subghz_protocol_keeloq_send_key(SubGhzProtocolKeeloq* instance, SubGhzProtocolEncoderCommon* encoder){
+ furi_assert(instance);
+ furi_assert(encoder);
+
+ //gen new key
+ instance->common.cnt++;
+ instance->common.code_last_found = subghz_protocol_keeloq_gen_key(instance);
+ if(instance->common.callback)instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
+
+ size_t index = 0;
+ encoder->size_upload =11*2+2+(instance->common.code_last_count_bit * 2) + 4;
+ if(encoder->size_upload > SUBGHZ_ENCODER_UPLOAD_MAX_SIZE) return false;
+
+ //Send header
+ for(uint8_t i = 11; i > 0; i--) {
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
+ }
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short*10);
+
+ //Send key data
+ for (uint8_t i = instance->common.code_last_count_bit; i > 0; i--) {
+ if(bit_read(instance->common.code_last_found, i - 1)){
+ //send bit 1
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_long);
+ }else{
+ //send bit 0
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_long);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
}
- // +send 2 status bit
- subghz_protocol_keeloq_send_bit(instance, 0);
- subghz_protocol_keeloq_send_bit(instance, 0);
- // send end
- subghz_protocol_keeloq_send_bit(instance, 0);
- delay_us(instance->common.te_shot * 2); //+2 interval END SEND
}
+ // +send 2 status bit
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_long);
+
+ //encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_long);
+ //encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
+
+ // send end
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short*40);
+
+ return true;
}
void subghz_protocol_keeloq_reset(SubGhzProtocolKeeloq* instance) {
@@ -219,7 +260,7 @@ void subghz_protocol_keeloq_parse(SubGhzProtocolKeeloq* instance, bool level, ui
switch(instance->common.parser_step) {
case 0:
if((level) &&
- DURATION_DIFF(duration, instance->common.te_shot) < instance->common.te_delta) {
+ DURATION_DIFF(duration, instance->common.te_short) < instance->common.te_delta) {
instance->common.parser_step = 1;
instance->common.header_count++;
} else {
@@ -229,12 +270,12 @@ void subghz_protocol_keeloq_parse(SubGhzProtocolKeeloq* instance, bool level, ui
break;
case 1:
if((!level) &&
- (DURATION_DIFF(duration, instance->common.te_shot) < instance->common.te_delta)) {
+ (DURATION_DIFF(duration, instance->common.te_short) < instance->common.te_delta)) {
instance->common.parser_step = 0;
break;
}
if((instance->common.header_count > 2) &&
- (DURATION_DIFF(duration, instance->common.te_shot * 10) <
+ (DURATION_DIFF(duration, instance->common.te_short * 10) <
instance->common.te_delta * 10)) {
// Found header
instance->common.parser_step = 2;
@@ -253,7 +294,7 @@ void subghz_protocol_keeloq_parse(SubGhzProtocolKeeloq* instance, bool level, ui
break;
case 3:
if(!level) {
- if(duration >= (instance->common.te_shot * 2 + instance->common.te_delta)) {
+ if(duration >= (instance->common.te_short * 2 + instance->common.te_delta)) {
// Found end TX
instance->common.parser_step = 0;
if(instance->common.code_count_bit >=
@@ -271,7 +312,7 @@ void subghz_protocol_keeloq_parse(SubGhzProtocolKeeloq* instance, bool level, ui
}
break;
} else if(
- (DURATION_DIFF(instance->common.te_last, instance->common.te_shot) <
+ (DURATION_DIFF(instance->common.te_last, instance->common.te_short) <
instance->common.te_delta) &&
(DURATION_DIFF(duration, instance->common.te_long) < instance->common.te_delta)) {
if(instance->common.code_count_bit <
@@ -282,7 +323,7 @@ void subghz_protocol_keeloq_parse(SubGhzProtocolKeeloq* instance, bool level, ui
} else if(
(DURATION_DIFF(instance->common.te_last, instance->common.te_long) <
instance->common.te_delta) &&
- (DURATION_DIFF(duration, instance->common.te_shot) < instance->common.te_delta)) {
+ (DURATION_DIFF(duration, instance->common.te_short) < instance->common.te_delta)) {
if(instance->common.code_count_bit <
instance->common.code_min_count_bit_for_found) {
subghz_protocol_common_add_bit(&instance->common, 0);
@@ -329,55 +370,17 @@ void subghz_protocol_keeloq_to_str(SubGhzProtocolKeeloq* instance, string_t outp
instance->common.btn);
}
-uint64_t subghz_protocol_keeloq_gen_key(SubGhzProtocolKeeloq* instance) {
- uint32_t fix = instance->common.btn << 28 | instance->common.serial;
- uint32_t decrypt = instance->common.btn << 28 | (instance->common.serial & 0x3FF) << 16 |
- instance->common.cnt;
- uint32_t hop = 0;
- uint64_t man_normal_learning = 0;
- int res = 0;
-
- for
- M_EACH(manufacture_code, *subghz_keystore_get_data(instance->keystore), SubGhzKeyArray_t) {
- res = strcmp(string_get_cstr(manufacture_code->name), instance->manufacture_name);
- if(res == 0) {
- switch(manufacture_code->type) {
- case KEELOQ_LEARNING_SIMPLE:
- //Simple Learning
- hop = subghz_protocol_keeloq_common_encrypt(decrypt, manufacture_code->key);
- break;
- case KEELOQ_LEARNING_NORMAL:
- //Simple Learning
- man_normal_learning =
- subghz_protocol_keeloq_common_normal_learning(fix, manufacture_code->key);
- hop = subghz_protocol_keeloq_common_encrypt(decrypt, man_normal_learning);
- break;
- case KEELOQ_LEARNING_UNKNOWN:
- hop = 0; //todo
- break;
- }
- break;
- }
- }
- uint64_t yek = (uint64_t)fix << 32 | hop;
- return subghz_protocol_common_reverse_key(yek, instance->common.code_last_count_bit);
-}
-
void subghz_protocol_keeloq_to_save_str(SubGhzProtocolKeeloq* instance, string_t output) {
- string_printf(
+ string_printf(
output,
"Protocol: %s\n"
"Bit: %d\n"
- "Manufacture_name: %s\n"
- "Serial: %08lX\n"
- "Cnt: %04lX\n"
- "Btn: %01lX\n",
+ "Key: %08lX%08lX\n",
instance->common.name,
instance->common.code_last_count_bit,
- instance->manufacture_name,
- instance->common.serial,
- instance->common.cnt,
- instance->common.btn);
+ (uint32_t)(instance->common.code_last_found >> 32),
+ (uint32_t)(instance->common.code_last_found & 0xFFFFFFFF)
+ );
}
bool subghz_protocol_keeloq_to_load_protocol(
@@ -386,8 +389,6 @@ bool subghz_protocol_keeloq_to_load_protocol(
bool loaded = false;
string_t temp_str;
string_init(temp_str);
- string_t temp_name_man;
- string_init(temp_name_man);
int res = 0;
int data = 0;
@@ -402,50 +403,23 @@ bool subghz_protocol_keeloq_to_load_protocol(
}
instance->common.code_last_count_bit = (uint8_t)data;
- // Read and parse name protocol from 3st line
- if(!file_worker_read_until(file_worker, temp_name_man, '\n')) {
- break;
- }
- // strlen("Manufacture_name: ") = 18
- string_right(temp_name_man, 18);
- instance->manufacture_name = string_get_cstr(temp_name_man);
-
- // Read and parse key data from 4nd line
+ // Read and parse key data from 3nd line
if(!file_worker_read_until(file_worker, temp_str, '\n')) {
break;
}
- uint32_t temp_param = 0;
- res = sscanf(string_get_cstr(temp_str), "Serial: %08lX\n", &temp_param);
- if(res != 1) {
- break;
- }
- instance->common.serial = temp_param;
+ // strlen("Key: ") = 5
+ string_right(temp_str, 5);
- // Read and parse key data from 5nd line
- if(!file_worker_read_until(file_worker, temp_str, '\n')) {
- break;
- }
- res = sscanf(string_get_cstr(temp_str), "Cnt: %04lX\n", &temp_param);
- if(res != 1) {
+ uint8_t buf_key[8]={0};
+ if(!subghz_protocol_common_read_hex(temp_str, buf_key, 8)){
break;
}
- instance->common.cnt = (uint16_t)temp_param;
- // Read and parse key data from 5nd line
- if(!file_worker_read_until(file_worker, temp_str, '\n')) {
- break;
- }
- res = sscanf(string_get_cstr(temp_str), "Btn: %01lX\n", &temp_param);
- if(res != 1) {
- break;
+ for(uint8_t i = 0; i < 8; i++){
+ instance->common.code_last_found = instance->common.code_last_found << 8 | buf_key[i];
}
- instance->common.btn = (uint8_t)temp_param;
-
- instance->common.code_last_found = subghz_protocol_keeloq_gen_key(instance);
-
loaded = true;
} while(0);
- string_clear(temp_name_man);
string_clear(temp_str);
return loaded;
diff --git a/lib/subghz/protocols/subghz_protocol_keeloq.h b/lib/subghz/protocols/subghz_protocol_keeloq.h
index 4560c725b50..cd591980a17 100644
--- a/lib/subghz/protocols/subghz_protocol_keeloq.h
+++ b/lib/subghz/protocols/subghz_protocol_keeloq.h
@@ -18,14 +18,27 @@ SubGhzProtocolKeeloq* subghz_protocol_keeloq_alloc(SubGhzKeystore* keystore);
*/
void subghz_protocol_keeloq_free(SubGhzProtocolKeeloq* instance);
-/** Sends the key on the air
+/** Set manufacture name
*
- * @param instance - SubGhzProtocolKeeloq instance
- * @param key - key send
- * @param bit - count bit key
- * @param repeat - repeat send key
+ * @param manufacture_name - manufacture name
+ * @param context - SubGhzProtocolKeeloq context
+ */
+void subghz_protocol_keeloq_set_manufacture_name(void* context, const char* manufacture_name);
+
+/** Get key keeloq
+ *
+ * @param context - SubGhzProtocolKeeloq context
+ * @return key
+ */
+uint64_t subghz_protocol_keeloq_gen_key(void* context);
+
+/** Get upload protocol
+ *
+ * @param instance - SubGhzProtocolCame instance
+ * @param encoder - SubGhzProtocolEncoderCommon encoder
+ * @return bool
*/
-void subghz_protocol_keeloq_send_key(SubGhzProtocolKeeloq* instance, uint64_t key, uint8_t bit, uint8_t repeat);
+bool subghz_protocol_keeloq_send_key(SubGhzProtocolKeeloq* instance, SubGhzProtocolEncoderCommon* encoder);
/** Reset internal state
* @param instance - SubGhzProtocolKeeloq instance
diff --git a/lib/subghz/protocols/subghz_protocol_nero_sketch.c b/lib/subghz/protocols/subghz_protocol_nero_sketch.c
index 8e22b0f3c97..4b20b4cbf07 100644
--- a/lib/subghz/protocols/subghz_protocol_nero_sketch.c
+++ b/lib/subghz/protocols/subghz_protocol_nero_sketch.c
@@ -10,14 +10,17 @@ SubGhzProtocolNeroSketch* subghz_protocol_nero_sketch_alloc(void) {
instance->common.name = "Nero Sketch";
instance->common.code_min_count_bit_for_found = 40;
- instance->common.te_shot = 330;
+ instance->common.te_short = 330;
instance->common.te_long = 660;
instance->common.te_delta = 150;
+ instance->common.type_protocol = TYPE_PROTOCOL_STATIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_nero_sketch_to_str;
instance->common.to_save_string =
(SubGhzProtocolCommonGetStrSave)subghz_protocol_nero_sketch_to_save_str;
instance->common.to_load_protocol=
(SubGhzProtocolCommonLoad)subghz_protocol_nero_sketch_to_load_protocol;
+ instance->common.get_upload_protocol =
+ (SubGhzProtocolEncoderCommonGetUpLoad)subghz_protocol_nero_sketch_send_key;
return instance;
}
@@ -27,53 +30,41 @@ void subghz_protocol_nero_sketch_free(SubGhzProtocolNeroSketch* instance) {
free(instance);
}
-/** Send bit
- *
- * @param instance - SubGhzProtocolNeroSketch instance
- * @param bit - bit
- */
-void subghz_protocol_nero_sketch_send_bit(SubGhzProtocolNeroSketch* instance, uint8_t bit) {
- if (bit) {
- //send bit 1
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_long);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
- } else {
- //send bit 0
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_long);
+bool subghz_protocol_nero_sketch_send_key(SubGhzProtocolNeroSketch* instance, SubGhzProtocolEncoderCommon* encoder){
+ furi_assert(instance);
+ furi_assert(encoder);
+ size_t index = 0;
+ encoder->size_upload = 47*2+2+(instance->common.code_last_count_bit * 2) + 2;
+ if(encoder->size_upload > SUBGHZ_ENCODER_UPLOAD_MAX_SIZE) return false;
+
+ //Send header
+ for(uint8_t i = 0; i < 47; i++){
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
}
-}
-
-void subghz_protocol_nero_sketch_send_key(SubGhzProtocolNeroSketch* instance, uint64_t key, uint8_t bit,uint8_t repeat) {
- while (repeat--) {
- //Send header
- for(uint8_t i = 0; i < 47; i++){
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
+
+ //Send start bit
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short*4);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
+
+ //Send key data
+ for (uint8_t i = instance->common.code_last_count_bit; i > 0; i--) {
+ if(bit_read(instance->common.code_last_found, i - 1)){
+ //send bit 1
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_long);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
+ }else{
+ //send bit 0
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_long);
}
+ }
- //Send start bit
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot*4);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
+ //Send stop bit
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short*3);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
- //Send key data
- for (uint8_t i = bit; i > 0; i--) {
- subghz_protocol_nero_sketch_send_bit(instance, bit_read(key, i - 1));
- }
- //Send stop bit
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot*3);
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
- }
+ return true;
}
void subghz_protocol_nero_sketch_reset(SubGhzProtocolNeroSketch* instance) {
@@ -101,7 +92,7 @@ void subghz_protocol_nero_sketch_parse(SubGhzProtocolNeroSketch* instance, bool
switch (instance->common.parser_step) {
case 0:
if ((level)
- && (DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta)) {
+ && (DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta)) {
instance->common.parser_step = 1;
instance->common.te_last = duration;
instance->common.header_count = 0;
@@ -111,18 +102,18 @@ void subghz_protocol_nero_sketch_parse(SubGhzProtocolNeroSketch* instance, bool
break;
case 1:
if (level){
- if((DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta )
- || (DURATION_DIFF(duration,instance->common.te_shot*4)< instance->common.te_delta)) {
+ if((DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta )
+ || (DURATION_DIFF(duration,instance->common.te_short*4)< instance->common.te_delta)) {
instance->common.te_last = duration;
} else {
instance->common.parser_step = 0;
}
- } else if(DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta){
- if(DURATION_DIFF(instance->common.te_last,instance->common.te_shot)< instance->common.te_delta){
+ } else if(DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta){
+ if(DURATION_DIFF(instance->common.te_last,instance->common.te_short)< instance->common.te_delta){
// Found header
instance->common.header_count++;
break;
- }else if(DURATION_DIFF(instance->common.te_last,instance->common.te_shot*4)< instance->common.te_delta){
+ }else if(DURATION_DIFF(instance->common.te_last,instance->common.te_short*4)< instance->common.te_delta){
// Found start bit
if(instance->common.header_count>40) {
instance->common.parser_step = 2;
@@ -140,7 +131,7 @@ void subghz_protocol_nero_sketch_parse(SubGhzProtocolNeroSketch* instance, bool
break;
case 2:
if (level) {
- if (duration >= (instance->common.te_shot * 2 + instance->common.te_delta*2)) {
+ if (duration >= (instance->common.te_short * 2 + instance->common.te_delta*2)) {
//Found stop bit
instance->common.parser_step = 0;
if (instance->common.code_count_bit>= instance->common.code_min_count_bit_for_found) {
@@ -164,12 +155,12 @@ void subghz_protocol_nero_sketch_parse(SubGhzProtocolNeroSketch* instance, bool
break;
case 3:
if(!level){
- if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot)< instance->common.te_delta)
+ if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short)< instance->common.te_delta)
&& (DURATION_DIFF(duration,instance->common.te_long)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 2;
} else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_long )< instance->common.te_delta)
- && (DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta)) {
+ && (DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 2;
} else {
diff --git a/lib/subghz/protocols/subghz_protocol_nero_sketch.h b/lib/subghz/protocols/subghz_protocol_nero_sketch.h
index 4fcce1c21d5..170895c420a 100644
--- a/lib/subghz/protocols/subghz_protocol_nero_sketch.h
+++ b/lib/subghz/protocols/subghz_protocol_nero_sketch.h
@@ -16,14 +16,13 @@ SubGhzProtocolNeroSketch* subghz_protocol_nero_sketch_alloc();
*/
void subghz_protocol_nero_sketch_free(SubGhzProtocolNeroSketch* instance);
-/** Sends the key on the air
+/** Get upload protocol
*
- * @param instance - SubGhzProtocolNeroSketch instance
- * @param key - key send
- * @param bit - count bit key
- * @param repeat - repeat send key
+ * @param instance - SubGhzProtocolCame instance
+ * @param encoder - SubGhzProtocolEncoderCommon encoder
+ * @return bool
*/
-void subghz_protocol_faac_nero_sketch_key(SubGhzProtocolNeroSketch* instance, uint64_t key, uint8_t bit, uint8_t repeat);
+bool subghz_protocol_nero_sketch_send_key(SubGhzProtocolNeroSketch* instance, SubGhzProtocolEncoderCommon* encoder);
/** Reset internal state
* @param instance - SubGhzProtocolNeroSketch instance
diff --git a/lib/subghz/protocols/subghz_protocol_nice_flo.c b/lib/subghz/protocols/subghz_protocol_nice_flo.c
index 0c0cb207c92..b53160b8b84 100644
--- a/lib/subghz/protocols/subghz_protocol_nice_flo.c
+++ b/lib/subghz/protocols/subghz_protocol_nice_flo.c
@@ -15,10 +15,17 @@ SubGhzProtocolNiceFlo* subghz_protocol_nice_flo_alloc() {
instance->common.name = "Nice FLO";
instance->common.code_min_count_bit_for_found = 12;
- instance->common.te_shot = 700;
+ instance->common.te_short = 700;
instance->common.te_long = 1400;
instance->common.te_delta = 200;
-
+ instance->common.type_protocol = TYPE_PROTOCOL_STATIC;
+ instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_nice_flo_to_str;
+ instance->common.to_save_string =
+ (SubGhzProtocolCommonGetStrSave)subghz_protocol_nice_flo_to_save_str;
+ instance->common.to_load_protocol=
+ (SubGhzProtocolCommonLoad)subghz_protocol_nice_flo_to_load_protocol;
+ instance->common.get_upload_protocol =
+ (SubGhzProtocolEncoderCommonGetUpLoad)subghz_protocol_nice_flo_send_key;
return instance;
}
@@ -27,39 +34,29 @@ void subghz_protocol_nice_flo_free(SubGhzProtocolNiceFlo* instance) {
free(instance);
}
-/** Send bit
- *
- * @param instance - SubGhzProtocolNiceFlo instance
- * @param bit - bit
- */
-void subghz_protocol_nice_flo_send_bit(SubGhzProtocolNiceFlo* instance, uint8_t bit) {
- if (bit) {
- //send bit 1
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_long);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- } else {
- //send bit 0
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_long);
- }
-}
-
-void subghz_protocol_nice_flo_send_key(SubGhzProtocolNiceFlo* instance, uint64_t key, uint8_t bit, uint8_t repeat) {
- while (repeat--) {
- //Send header
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot * 34); //+2 interval v bit 1
- //Send start bit
- subghz_protocol_nice_flo_send_bit(instance, 1);
- //Send key data
- for (uint8_t i = bit; i > 0; i--) {
- subghz_protocol_nice_flo_send_bit(instance, bit_read(key, i - 1));
+bool subghz_protocol_nice_flo_send_key(SubGhzProtocolNiceFlo* instance, SubGhzProtocolEncoderCommon* encoder){
+ furi_assert(instance);
+ furi_assert(encoder);
+ size_t index = 0;
+ encoder->size_upload =(instance->common.code_last_count_bit * 2) + 2;
+ if(encoder->size_upload > SUBGHZ_ENCODER_UPLOAD_MAX_SIZE) return false;
+ //Send header
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short * 36);
+ //Send start bit
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ //Send key data
+ for (uint8_t i = instance->common.code_last_count_bit; i > 0; i--) {
+ if(bit_read(instance->common.code_last_found, i - 1)){
+ //send bit 1
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_long);
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_short);
+ }else{
+ //send bit 0
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->common.te_short);
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->common.te_long);
}
}
+ return true;
}
void subghz_protocol_nice_flo_reset(SubGhzProtocolNiceFlo* instance) {
@@ -70,7 +67,7 @@ void subghz_protocol_nice_flo_parse(SubGhzProtocolNiceFlo* instance, bool level,
switch (instance->common.parser_step) {
case 0:
if ((!level)
- && (DURATION_DIFF(duration, instance->common.te_shot * 36)< instance->common.te_delta * 36)) {
+ && (DURATION_DIFF(duration, instance->common.te_short * 36)< instance->common.te_delta * 36)) {
//Found header Nice Flo
instance->common.parser_step = 1;
} else {
@@ -80,7 +77,7 @@ void subghz_protocol_nice_flo_parse(SubGhzProtocolNiceFlo* instance, bool level,
case 1:
if (!level) {
break;
- } else if (DURATION_DIFF(duration, instance->common.te_shot)< instance->common.te_delta) {
+ } else if (DURATION_DIFF(duration, instance->common.te_short)< instance->common.te_delta) {
//Found start bit Nice Flo
instance->common.parser_step = 2;
instance->common.code_found = 0;
@@ -91,10 +88,15 @@ void subghz_protocol_nice_flo_parse(SubGhzProtocolNiceFlo* instance, bool level,
break;
case 2:
if (!level) { //save interval
- if (duration >= (instance->common.te_shot * 4)) {
+ if (duration >= (instance->common.te_short * 4)) {
instance->common.parser_step = 1;
if (instance->common.code_count_bit>= instance->common.code_min_count_bit_for_found) {
+
+ instance->common.serial = 0x0;
+ instance->common.btn = 0x0;
+ instance->common.code_last_found = instance->common.code_found;
+ instance->common.code_last_count_bit = instance->common.code_count_bit;
if (instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
}
@@ -108,12 +110,12 @@ void subghz_protocol_nice_flo_parse(SubGhzProtocolNiceFlo* instance, bool level,
break;
case 3:
if (level) {
- if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot) < instance->common.te_delta)
+ if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short) < instance->common.te_delta)
&& (DURATION_DIFF(duration, instance->common.te_long)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 2;
} else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_long)< instance->common.te_delta)
- && (DURATION_DIFF(duration, instance->common.te_shot)< instance->common.te_delta)) {
+ && (DURATION_DIFF(duration, instance->common.te_short)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 2;
} else
@@ -124,3 +126,72 @@ void subghz_protocol_nice_flo_parse(SubGhzProtocolNiceFlo* instance, bool level,
break;
}
}
+
+void subghz_protocol_nice_flo_to_str(SubGhzProtocolNiceFlo* instance, string_t output) {
+ uint32_t code_found_lo = instance->common.code_last_found & 0x00000000ffffffff;
+
+ uint64_t code_found_reverse = subghz_protocol_common_reverse_key(
+ instance->common.code_last_found, instance->common.code_last_count_bit);
+
+ uint32_t code_found_reverse_lo = code_found_reverse & 0x00000000ffffffff;
+
+ string_cat_printf(
+ output,
+ "%s %d Bit\r\n"
+ " KEY:0x%08lX\r\n"
+ " YEK:0x%08lX\r\n",
+ instance->common.name,
+ instance->common.code_last_count_bit,
+ code_found_lo,
+ code_found_reverse_lo
+ );
+}
+
+
+void subghz_protocol_nice_flo_to_save_str(SubGhzProtocolNiceFlo* instance, string_t output) {
+ string_printf(
+ output,
+ "Protocol: %s\n"
+ "Bit: %d\n"
+ "Key: %08lX\n",
+ instance->common.name,
+ instance->common.code_last_count_bit,
+ (uint32_t)(instance->common.code_last_found & 0x00000000ffffffff));
+}
+
+bool subghz_protocol_nice_flo_to_load_protocol(FileWorker* file_worker, SubGhzProtocolNiceFlo* instance){
+ bool loaded = false;
+ string_t temp_str;
+ string_init(temp_str);
+ int res = 0;
+ int data = 0;
+
+ do {
+ // Read and parse bit data from 2nd line
+ if(!file_worker_read_until(file_worker, temp_str, '\n')) {
+ break;
+ }
+ res = sscanf(string_get_cstr(temp_str), "Bit: %d\n", &data);
+ if(res != 1) {
+ break;
+ }
+ instance->common.code_last_count_bit = (uint8_t)data;
+
+ // Read and parse key data from 3nd line
+ if(!file_worker_read_until(file_worker, temp_str, '\n')) {
+ break;
+ }
+ uint32_t temp_key = 0;
+ res = sscanf(string_get_cstr(temp_str), "Key: %08lX\n", &temp_key);
+ if(res != 1) {
+ break;
+ }
+ instance->common.code_last_found = (uint64_t)temp_key;
+
+ loaded = true;
+ } while(0);
+
+ string_clear(temp_str);
+
+ return loaded;
+}
diff --git a/lib/subghz/protocols/subghz_protocol_nice_flo.h b/lib/subghz/protocols/subghz_protocol_nice_flo.h
index 80075bb24b0..fc80f02ae34 100644
--- a/lib/subghz/protocols/subghz_protocol_nice_flo.h
+++ b/lib/subghz/protocols/subghz_protocol_nice_flo.h
@@ -16,14 +16,13 @@ SubGhzProtocolNiceFlo* subghz_protocol_nice_flo_alloc();
*/
void subghz_protocol_nice_flo_free(SubGhzProtocolNiceFlo* instance);
-/** Sends the key on the air
+/** Get upload protocol
*
- * @param instance - SubGhzProtocolNiceFlo instance
- * @param key - key send
- * @param bit - count bit key
- * @param repeat - repeat send key
+ * @param instance - SubGhzProtocolCame instance
+ * @param encoder - SubGhzProtocolEncoderCommon encoder
+ * @return bool
*/
-void subghz_protocol_nice_flo_send_key(SubGhzProtocolNiceFlo* instance, uint64_t key, uint8_t bit, uint8_t repeat);
+bool subghz_protocol_nice_flo_send_key(SubGhzProtocolNiceFlo* instance, SubGhzProtocolEncoderCommon* encoder);
/** Reset internal state
* @param instance - SubGhzProtocolNiceFlo instance
@@ -36,3 +35,13 @@ void subghz_protocol_nice_flo_reset(SubGhzProtocolNiceFlo* instance);
* @param data - LevelDuration level_duration
*/
void subghz_protocol_nice_flo_parse(SubGhzProtocolNiceFlo* instance, bool level, uint32_t duration);
+
+/** Outputting information from the parser
+ *
+ * @param instance - SubGhzProtocolNiceFlo* instance
+ * @param output - output string
+ */
+void subghz_protocol_nice_flo_to_str(SubGhzProtocolNiceFlo* instance, string_t output);
+
+void subghz_protocol_nice_flo_to_save_str(SubGhzProtocolNiceFlo* instance, string_t output);
+bool subghz_protocol_nice_flo_to_load_protocol(FileWorker* file_worker, SubGhzProtocolNiceFlo* instance);
diff --git a/lib/subghz/protocols/subghz_protocol_nice_flor_s.c b/lib/subghz/protocols/subghz_protocol_nice_flor_s.c
index f774e6d8fe5..ab6b83ea8ca 100644
--- a/lib/subghz/protocols/subghz_protocol_nice_flor_s.c
+++ b/lib/subghz/protocols/subghz_protocol_nice_flor_s.c
@@ -18,9 +18,10 @@ SubGhzProtocolNiceFlorS* subghz_protocol_nice_flor_s_alloc() {
instance->common.name = "Nice FloR-S";
instance->common.code_min_count_bit_for_found = 52;
- instance->common.te_shot = 500;
+ instance->common.te_short = 500;
instance->common.te_long = 1000;
instance->common.te_delta = 300;
+ instance->common.type_protocol = TYPE_PROTOCOL_DYNAMIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_nice_flor_s_to_str;
return instance;
@@ -44,14 +45,14 @@ void subghz_protocol_nice_flor_s_name_file(SubGhzProtocolNiceFlorS* instance, co
void subghz_protocol_nice_flor_s_send_bit(SubGhzProtocolNiceFlorS* instance, uint8_t bit) {
if(bit) {
//send bit 1
- SUBGHZ_TX_PIN_HIGTH();
+ SUBGHZ_TX_PIN_HIGH();
delay_us(instance->common.te_long);
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
+ delay_us(instance->common.te_short);
} else {
//send bit 0
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
+ SUBGHZ_TX_PIN_HIGH();
+ delay_us(instance->common.te_short);
SUBGHZ_TX_PIN_LOW();
delay_us(instance->common.te_long);
}
@@ -65,21 +66,21 @@ void subghz_protocol_nice_flor_s_send_key(
while(repeat--) {
//Send header
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot * 34);
+ delay_us(instance->common.te_short * 34);
//Send Start Bit
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot * 3);
+ SUBGHZ_TX_PIN_HIGH();
+ delay_us(instance->common.te_short * 3);
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot * 3);
+ delay_us(instance->common.te_short * 3);
//Send key data
for(uint8_t i = bit; i > 0; i--) {
subghz_protocol_nice_flor_s_send_bit(instance, bit_read(key, i - 1));
}
//Send Stop Bit
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot * 3);
+ SUBGHZ_TX_PIN_HIGH();
+ delay_us(instance->common.te_short * 3);
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot * 3);
+ delay_us(instance->common.te_short * 3);
}
}
@@ -130,18 +131,17 @@ void subghz_nice_flor_s_decoder_decrypt(SubGhzProtocolNiceFlorS* instance) {
* S3,S2,S1,S0 - serial number of the console 28 bit.
*/
- uint16_t p3p4 = (uint16_t)(instance->common.code_found >> 24);
- instance->common.cnt = subghz_nice_flor_s_get_byte_in_file(instance,p3p4*2) << 8 | subghz_nice_flor_s_get_byte_in_file(instance,p3p4*2+1); //nice_flor_srainbow_table_for_search[p3p4]; тут надо считать поле с файла причем адрес надо у множить на 2
- uint8_t k =(uint8_t)(p3p4 & 0x00FF) ^subghz_nice_flor_s_get_byte_in_file(instance,(0x20000 |(instance->common.cnt &0x00ff))); //nice_flor_srainbow_table_for_search[0x10000|subghz_protocol_nice_flor_s.cnt & 0x00ff];
+ uint16_t p3p4 = (uint16_t)(instance->common.code_last_found >> 24);
+ instance->common.cnt = subghz_nice_flor_s_get_byte_in_file(instance,p3p4*2) << 8 | subghz_nice_flor_s_get_byte_in_file(instance,p3p4*2+1);
+ uint8_t k =(uint8_t)(p3p4 & 0x00FF) ^subghz_nice_flor_s_get_byte_in_file(instance,(0x20000 |(instance->common.cnt &0x00ff)));
- uint8_t s3 = ((uint8_t)(instance->common.code_found >> 40) ^ k) & 0x0f;
- uint8_t s2 = ((uint8_t)(instance->common.code_found >> 16) ^ k);
- uint8_t s1 = ((uint8_t)(instance->common.code_found >> 8) ^ k);
- uint8_t s0 = ((uint8_t)(instance->common.code_found) ^ k);
+ uint8_t s3 = ((uint8_t)(instance->common.code_last_found >> 40) ^ k) & 0x0f;
+ uint8_t s2 = ((uint8_t)(instance->common.code_last_found >> 16) ^ k);
+ uint8_t s1 = ((uint8_t)(instance->common.code_last_found >> 8) ^ k);
+ uint8_t s0 = ((uint8_t)(instance->common.code_last_found) ^ k);
instance->common.serial = s3 << 24 | s2 << 16 | s1 << 8 | s0;
- instance->common.btn = (instance->common.code_found >> 48) & 0x0f;
- if(instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
+ instance->common.btn = (instance->common.code_last_found >> 48) & 0x0f;
}
void subghz_protocol_nice_flor_s_reset(SubGhzProtocolNiceFlorS* instance) {
@@ -152,7 +152,7 @@ void subghz_protocol_nice_flor_s_parse(SubGhzProtocolNiceFlorS* instance, bool l
switch(instance->common.parser_step) {
case 0:
if((!level)
- && (DURATION_DIFF(duration, instance->common.te_shot * 38) < instance->common.te_delta * 38)) {
+ && (DURATION_DIFF(duration, instance->common.te_short * 38) < instance->common.te_delta * 38)) {
//Found start header Nice Flor-S
instance->common.parser_step = 1;
} else {
@@ -161,7 +161,7 @@ void subghz_protocol_nice_flor_s_parse(SubGhzProtocolNiceFlorS* instance, bool l
break;
case 1:
if((level)
- && (DURATION_DIFF(duration, instance->common.te_shot * 3) < instance->common.te_delta * 3)) {
+ && (DURATION_DIFF(duration, instance->common.te_short * 3) < instance->common.te_delta * 3)) {
//Found next header Nice Flor-S
instance->common.parser_step = 2;
} else {
@@ -170,7 +170,7 @@ void subghz_protocol_nice_flor_s_parse(SubGhzProtocolNiceFlorS* instance, bool l
break;
case 2:
if((!level)
- && (DURATION_DIFF(duration, instance->common.te_shot * 3) < instance->common.te_delta * 3)) {
+ && (DURATION_DIFF(duration, instance->common.te_short * 3) < instance->common.te_delta * 3)) {
//Found header Nice Flor-S
instance->common.parser_step = 3;
instance->common.code_found = 0;
@@ -181,13 +181,13 @@ void subghz_protocol_nice_flor_s_parse(SubGhzProtocolNiceFlorS* instance, bool l
break;
case 3:
if(level) {
- if(DURATION_DIFF(duration, instance->common.te_shot * 3) < instance->common.te_delta) {
+ if(DURATION_DIFF(duration, instance->common.te_short * 3) < instance->common.te_delta) {
//Found STOP bit
instance->common.parser_step = 0;
if(instance->common.code_count_bit >=instance->common.code_min_count_bit_for_found) {
-
- subghz_nice_flor_s_decoder_decrypt(instance);
-
+ instance->common.code_last_found = instance->common.code_found;
+ instance->common.code_last_count_bit = instance->common.code_count_bit;
+ if(instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
}
break;
} else {
@@ -199,13 +199,13 @@ void subghz_protocol_nice_flor_s_parse(SubGhzProtocolNiceFlorS* instance, bool l
break;
case 4:
if(!level) {
- if((DURATION_DIFF(instance->common.te_last, instance->common.te_shot) < instance->common.te_delta)
+ if((DURATION_DIFF(instance->common.te_last, instance->common.te_short) < instance->common.te_delta)
&&(DURATION_DIFF(duration, instance->common.te_long) < instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 3;
} else if(
(DURATION_DIFF(instance->common.te_last, instance->common.te_long) < instance->common.te_delta)
- &&(DURATION_DIFF(duration, instance->common.te_shot) < instance->common.te_delta)) {
+ &&(DURATION_DIFF(duration, instance->common.te_short) < instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 3;
} else
@@ -218,17 +218,18 @@ void subghz_protocol_nice_flor_s_parse(SubGhzProtocolNiceFlorS* instance, bool l
}
void subghz_protocol_nice_flor_s_to_str(SubGhzProtocolNiceFlorS* instance, string_t output) {
- uint32_t code_found_hi = instance->common.code_found >> 32;
- uint32_t code_found_lo = instance->common.code_found & 0x00000000ffffffff;
+ subghz_nice_flor_s_decoder_decrypt(instance);
+ uint32_t code_found_hi = instance->common.code_last_found >> 32;
+ uint32_t code_found_lo = instance->common.code_last_found & 0x00000000ffffffff;
string_cat_printf(
output,
- "Protocol %s, %d Bit\r\n"
+ "%s, %d Bit\r\n"
" KEY:0x%lX%08lX\r\n"
" SN:%05lX\r\n"
" CNT:%04X BTN:%02lX\r\n",
instance->common.name,
- instance->common.code_count_bit,
+ instance->common.code_last_count_bit,
code_found_hi,
code_found_lo,
instance->common.serial,
diff --git a/lib/subghz/protocols/subghz_protocol_princeton.c b/lib/subghz/protocols/subghz_protocol_princeton.c
index 210f0db023d..c05f297b8e1 100644
--- a/lib/subghz/protocols/subghz_protocol_princeton.c
+++ b/lib/subghz/protocols/subghz_protocol_princeton.c
@@ -16,15 +16,9 @@ struct SubGhzEncoderPrinceton {
size_t front;
};
-struct SubGhzDecoderPrinceton {
- SubGhzProtocolCommon common;
- uint16_t te;
-};
SubGhzEncoderPrinceton* subghz_encoder_princeton_alloc() {
SubGhzEncoderPrinceton* instance = furi_alloc(sizeof(SubGhzEncoderPrinceton));
-
-
return instance;
}
@@ -32,6 +26,7 @@ void subghz_encoder_princeton_free(SubGhzEncoderPrinceton* instance) {
furi_assert(instance);
free(instance);
}
+
void subghz_encoder_princeton_set_te(SubGhzEncoderPrinceton* instance, void* decoder){
SubGhzDecoderPrinceton* pricenton = decoder;
if((pricenton->te) !=0){
@@ -42,7 +37,7 @@ void subghz_encoder_princeton_set_te(SubGhzEncoderPrinceton* instance, void* dec
}
-void subghz_encoder_princeton_reset(SubGhzEncoderPrinceton* instance, uint32_t key, size_t repeat) {
+void subghz_encoder_princeton_set(SubGhzEncoderPrinceton* instance, uint32_t key, size_t repeat) {
furi_assert(instance);
instance->te = SUBGHZ_PT_SHORT;
instance->key = key;
@@ -85,21 +80,24 @@ LevelDuration subghz_encoder_princeton_yield(void* context) {
return ret;
}
-
SubGhzDecoderPrinceton* subghz_decoder_princeton_alloc(void) {
SubGhzDecoderPrinceton* instance = furi_alloc(sizeof(SubGhzDecoderPrinceton));
+ instance->te = SUBGHZ_PT_SHORT;
instance->common.name = "Princeton";
instance->common.code_min_count_bit_for_found = 24;
- instance->common.te_shot = 450; //150;
- instance->common.te_long = 1350; //450;
+ instance->common.te_short = SUBGHZ_PT_SHORT; //150;
+ instance->common.te_long = SUBGHZ_PT_LONG; //450;
instance->common.te_delta = 200; //50;
+ instance->common.type_protocol = TYPE_PROTOCOL_STATIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_decoder_princeton_to_str;
instance->common.to_save_string =
(SubGhzProtocolCommonGetStrSave)subghz_decoder_princeton_to_save_str;
instance->common.to_load_protocol=
(SubGhzProtocolCommonLoad)subghz_decoder_princeton_to_load_protocol;
-
+ instance->common.get_upload_protocol =
+ (SubGhzProtocolEncoderCommonGetUpLoad)subghz_protocol_princeton_send_key;
+
return instance;
}
@@ -108,43 +106,32 @@ void subghz_decoder_princeton_free(SubGhzDecoderPrinceton* instance) {
free(instance);
}
-/** Send bit
- *
- * @param instance - SubGhzDecoderPrinceton instance
- * @param bit - bit
- */
-void subghz_decoder_princeton_send_bit(SubGhzDecoderPrinceton* instance, uint8_t bit) {
- if(bit) {
- //send bit 1
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_long);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
- } else {
- //send bit 0
- SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_long);
- }
-}
-
-void subghz_decoder_princeton_send_key(
- SubGhzDecoderPrinceton* instance,
- uint64_t key,
- uint8_t bit,
- uint8_t repeat) {
- while(repeat--) {
- SUBGHZ_TX_PIN_LOW();
- //Send start bit
- subghz_decoder_princeton_send_bit(instance, 1);
- //Send header
- delay_us(instance->common.te_shot * 33); //+2 interval v bit 1
- //Send key data
- for(uint8_t i = bit; i > 0; i--) {
- subghz_decoder_princeton_send_bit(instance, bit_read(key, i - 1));
+bool subghz_protocol_princeton_send_key(SubGhzDecoderPrinceton* instance, SubGhzProtocolEncoderCommon* encoder){
+ furi_assert(instance);
+ furi_assert(encoder);
+ size_t index = 0;
+ encoder->size_upload =(instance->common.code_last_count_bit * 2) + 2;
+ if(encoder->size_upload > SUBGHZ_ENCODER_UPLOAD_MAX_SIZE) return false;
+
+ //Send key data
+ for (uint8_t i = instance->common.code_last_count_bit; i > 0; i--) {
+ if(bit_read(instance->common.code_last_found, i - 1)){
+ //send bit 1
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->te*3);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->te);
+ }else{
+ //send bit 0
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->te);
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->te*3);
}
}
+
+ //Send Stop bit
+ encoder->upload[index++] = level_duration_make(true, (uint32_t)instance->te);
+ //Send PT_GUARD
+ encoder->upload[index++] = level_duration_make(false, (uint32_t)instance->te*30);
+
+ return true;
}
void subghz_decoder_princeton_reset(SubGhzDecoderPrinceton* instance) {
@@ -157,7 +144,7 @@ void subghz_decoder_princeton_parse(
uint32_t duration) {
switch(instance->common.parser_step) {
case 0:
- if((!level) && (DURATION_DIFF(duration, instance->common.te_shot * 36) <
+ if((!level) && (DURATION_DIFF(duration, instance->common.te_short * 36) <
instance->common.te_delta * 36)) {
//Found Preambula
instance->common.parser_step = 1;
@@ -176,7 +163,7 @@ void subghz_decoder_princeton_parse(
break;
case 2:
if(!level) {
- if(duration >= (instance->common.te_shot * 10 + instance->common.te_delta)) {
+ if(duration >= (instance->common.te_short * 10 + instance->common.te_delta)) {
instance->common.parser_step = 1;
if(instance->common.code_count_bit >=
instance->common.code_min_count_bit_for_found) {
@@ -202,7 +189,7 @@ void subghz_decoder_princeton_parse(
break;
}
- if((DURATION_DIFF(instance->common.te_last, instance->common.te_shot) <
+ if((DURATION_DIFF(instance->common.te_last, instance->common.te_short) <
instance->common.te_delta) &&
(DURATION_DIFF(duration, instance->common.te_long) <
instance->common.te_delta * 3)) {
@@ -211,7 +198,7 @@ void subghz_decoder_princeton_parse(
} else if(
(DURATION_DIFF(instance->common.te_last, instance->common.te_long) <
instance->common.te_delta * 3) &&
- (DURATION_DIFF(duration, instance->common.te_shot) < instance->common.te_delta)) {
+ (DURATION_DIFF(duration, instance->common.te_short) < instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 1);
instance->common.parser_step = 1;
} else {
@@ -225,27 +212,23 @@ void subghz_decoder_princeton_parse(
}
void subghz_decoder_princeton_to_str(SubGhzDecoderPrinceton* instance, string_t output) {
- uint32_t code_found_hi = instance->common.code_last_found >> 32;
uint32_t code_found_lo = instance->common.code_last_found & 0x00000000ffffffff;
uint64_t code_found_reverse = subghz_protocol_common_reverse_key(
instance->common.code_last_found, instance->common.code_last_count_bit);
- uint32_t code_found_reverse_hi = code_found_reverse >> 32;
uint32_t code_found_reverse_lo = code_found_reverse & 0x00000000ffffffff;
string_cat_printf(
output,
"%s %d Bit te %dus\r\n"
- " KEY:0x%lX%08lX\r\n"
- " YEK:0x%lX%08lX\r\n"
+ " KEY:0x%08lX\r\n"
+ " YEK:0x%08lX\r\n"
" SN:0x%05lX BTN:%02X\r\n",
instance->common.name,
instance->common.code_last_count_bit,
instance->te,
- code_found_hi,
code_found_lo,
- code_found_reverse_hi,
code_found_reverse_lo,
instance->common.serial,
instance->common.btn);
diff --git a/lib/subghz/protocols/subghz_protocol_princeton.h b/lib/subghz/protocols/subghz_protocol_princeton.h
index 7feeb978982..a414b6a2940 100644
--- a/lib/subghz/protocols/subghz_protocol_princeton.h
+++ b/lib/subghz/protocols/subghz_protocol_princeton.h
@@ -2,6 +2,10 @@
#include "subghz_protocol_common.h"
+struct SubGhzDecoderPrinceton {
+ SubGhzProtocolCommon common;
+ uint16_t te;
+};
/** SubGhzEncoderPrinceton anonymous type */
typedef struct SubGhzEncoderPrinceton SubGhzEncoderPrinceton;
@@ -17,12 +21,12 @@ SubGhzEncoderPrinceton* subghz_encoder_princeton_alloc();
void subghz_encoder_princeton_free(SubGhzEncoderPrinceton* instance);
-/** Reset encoder with new params
+/** Set new encoder params
* @param instance - SubGhzEncoderPrinceton instance
* @param key - 24bit key
* @param repeat - how many times to repeat
*/
-void subghz_encoder_princeton_reset(SubGhzEncoderPrinceton* instance, uint32_t key, size_t repeat);
+void subghz_encoder_princeton_set(SubGhzEncoderPrinceton* instance, uint32_t key, size_t repeat);
/** Get repeat count left
* @param instance - SubGhzEncoderPrinceton instance
@@ -57,14 +61,13 @@ SubGhzDecoderPrinceton* subghz_decoder_princeton_alloc();
*/
void subghz_decoder_princeton_free(SubGhzDecoderPrinceton* instance);
-/** Sends the key on the air
+/** Get upload protocol
*
* @param instance - SubGhzDecoderPrinceton instance
- * @param key - key send
- * @param bit - count bit key
- * @param repeat - repeat send key
+ * @param encoder - SubGhzProtocolEncoderCommon encoder
+ * @return bool
*/
-void subghz_decoder_princeton_send_key(SubGhzDecoderPrinceton* instance, uint64_t key, uint8_t bit, uint8_t repeat);
+bool subghz_protocol_princeton_send_key(SubGhzDecoderPrinceton* instance, SubGhzProtocolEncoderCommon* encoder);
/** Reset internal state
* @param instance - SubGhzDecoderPrinceton instance
diff --git a/lib/subghz/protocols/subghz_protocol_star_line.c b/lib/subghz/protocols/subghz_protocol_star_line.c
index b676f2e9c7d..1890b5e6570 100644
--- a/lib/subghz/protocols/subghz_protocol_star_line.c
+++ b/lib/subghz/protocols/subghz_protocol_star_line.c
@@ -22,9 +22,10 @@ SubGhzProtocolStarLine* subghz_protocol_star_line_alloc(SubGhzKeystore* keystore
instance->common.name = "Star Line";
instance->common.code_min_count_bit_for_found = 64;
- instance->common.te_shot = 250;
+ instance->common.te_short = 250;
instance->common.te_long = 500;
instance->common.te_delta = 120;
+ instance->common.type_protocol = TYPE_PROTOCOL_DYNAMIC;
instance->common.to_string = (SubGhzProtocolCommonToStr)subghz_protocol_star_line_to_str;
return instance;
@@ -43,16 +44,16 @@ void subghz_protocol_star_line_free(SubGhzProtocolStarLine* instance) {
void subghz_protocol_star_line_send_bit(SubGhzProtocolStarLine* instance, uint8_t bit) {
if (bit) {
//send bit 1
- SUBGHZ_TX_PIN_HIGTH();
+ SUBGHZ_TX_PIN_HIGH();
delay_us(instance->common.te_long);
SUBGHZ_TX_PIN_LOW();
delay_us(instance->common.te_long);
} else {
//send bit 0
- SUBGHZ_TX_PIN_HIGTH();
- delay_us(instance->common.te_shot);
+ SUBGHZ_TX_PIN_HIGH();
+ delay_us(instance->common.te_short);
SUBGHZ_TX_PIN_LOW();
- delay_us(instance->common.te_shot);
+ delay_us(instance->common.te_short);
}
}
@@ -60,7 +61,7 @@ void subghz_protocol_star_line_send_key(SubGhzProtocolStarLine* instance, uint64
while (repeat--) {
//Send header
for(uint8_t i = 0; i < 6; i++){
- SUBGHZ_TX_PIN_HIGTH();
+ SUBGHZ_TX_PIN_HIGH();
delay_us(instance->common.te_long * 2);
SUBGHZ_TX_PIN_LOW();
delay_us(instance->common.te_long * 2);
@@ -174,7 +175,7 @@ uint8_t subghz_protocol_star_line_check_remote_controller_selector(SubGhzProtoco
* @param instance SubGhzProtocolStarLine instance
*/
void subghz_protocol_star_line_check_remote_controller(SubGhzProtocolStarLine* instance) {
- uint64_t key = subghz_protocol_common_reverse_key(instance->common.code_found, instance->common.code_count_bit);
+ uint64_t key = subghz_protocol_common_reverse_key(instance->common.code_last_found, instance->common.code_last_count_bit);
uint32_t key_fix = key >> 32;
uint32_t key_hop = key & 0x00000000ffffffff;
@@ -182,10 +183,6 @@ void subghz_protocol_star_line_check_remote_controller(SubGhzProtocolStarLine* i
instance ->common.serial= key_fix&0x00FFFFFF;
instance->common.btn = key_fix >> 24;
-
-
- if (instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
-
}
void subghz_protocol_star_line_parse(SubGhzProtocolStarLine* instance, bool level, uint32_t duration) {
@@ -222,7 +219,9 @@ void subghz_protocol_star_line_parse(SubGhzProtocolStarLine* instance, bool leve
instance->common.parser_step = 0;
if (instance->common.code_count_bit>= instance->common.code_min_count_bit_for_found) {
if(instance->common.code_last_found != instance->common.code_found){
- subghz_protocol_star_line_check_remote_controller(instance);
+ instance->common.code_last_found = instance->common.code_found;
+ instance->common.code_last_count_bit = instance->common.code_count_bit;
+ if (instance->common.callback) instance->common.callback((SubGhzProtocolCommon*)instance, instance->common.context);
}
}
instance->common.code_found = 0;
@@ -240,8 +239,8 @@ void subghz_protocol_star_line_parse(SubGhzProtocolStarLine* instance, bool leve
break;
case 3:
if(!level){
- if ((DURATION_DIFF(instance->common.te_last,instance->common.te_shot)< instance->common.te_delta)
- && (DURATION_DIFF(duration,instance->common.te_shot)< instance->common.te_delta)) {
+ if ((DURATION_DIFF(instance->common.te_last,instance->common.te_short)< instance->common.te_delta)
+ && (DURATION_DIFF(duration,instance->common.te_short)< instance->common.te_delta)) {
subghz_protocol_common_add_bit(&instance->common, 0);
instance->common.parser_step = 2;
} else if ((DURATION_DIFF(instance->common.te_last,instance->common.te_long )< instance->common.te_delta)
@@ -259,22 +258,23 @@ void subghz_protocol_star_line_parse(SubGhzProtocolStarLine* instance, bool leve
}
void subghz_protocol_star_line_to_str(SubGhzProtocolStarLine* instance, string_t output) {
- uint32_t code_found_hi = instance->common.code_found >> 32;
- uint32_t code_found_lo = instance->common.code_found & 0x00000000ffffffff;
+ subghz_protocol_star_line_check_remote_controller(instance);
+ uint32_t code_found_hi = instance->common.code_last_found >> 32;
+ uint32_t code_found_lo = instance->common.code_last_found & 0x00000000ffffffff;
- uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_found, instance->common.code_count_bit);
+ uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->common.code_last_found, instance->common.code_last_count_bit);
uint32_t code_found_reverse_hi = code_found_reverse>>32;
uint32_t code_found_reverse_lo = code_found_reverse&0x00000000ffffffff;
string_cat_printf(
output,
- "Protocol %s, %d Bit\r\n"
+ "%s, %d Bit\r\n"
"KEY:0x%lX%lX\r\n"
"FIX:%08lX MF:%s \r\n"
"HOP:%08lX \r\n"
"SN:%06lX CNT:%04X B:%02lX\r\n",
instance->common.name,
- instance->common.code_count_bit,
+ instance->common.code_last_count_bit,
code_found_hi,
code_found_lo,
code_found_reverse_hi,
diff --git a/lib/toolbox/args.h b/lib/toolbox/args.h
index 4d394092d3d..e6c35e5695b 100644
--- a/lib/toolbox/args.h
+++ b/lib/toolbox/args.h
@@ -1,7 +1,8 @@
#pragma once
-#include "m-string.h"
-#include "stdint.h"
-#include "stdbool.h"
+
+#include
+#include
+#include
#ifdef __cplusplus
extern "C" {
diff --git a/lib/toolbox/md5.c b/lib/toolbox/md5.c
new file mode 100644
index 00000000000..b873ee0fa32
--- /dev/null
+++ b/lib/toolbox/md5.c
@@ -0,0 +1,299 @@
+/*******************************************************************************
+* Portions COPYRIGHT 2015 STMicroelectronics *
+* Portions Copyright (C) 2006-2013, Brainspark B.V. *
+*******************************************************************************/
+
+/*
+ * RFC 1321 compliant MD5 implementation
+ *
+ * Copyright (C) 2006-2013, Brainspark B.V.
+ *
+ * This file is part of PolarSSL (http://www.polarssl.org)
+ * Lead Maintainer: Paul Bakker
+ *
+ * All rights reserved.
+ *
+ * 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.
+ */
+/*
+ * The MD5 algorithm was designed by Ron Rivest in 1991.
+ *
+ * http://www.ietf.org/rfc/rfc1321.txt
+ */
+
+/**
+ ******************************************************************************
+ * @file md5.c
+ * @author MCD Application Team
+ * @brief This file has been modified to support the hardware Cryptographic and
+ * Hash processors embedded in STM32F415xx/417xx/437xx/439xx/756xx devices.
+ * This support is activated by defining the "USE_STM32F4XX_HW_CRYPTO"
+ * or "USE_STM32F7XX_HW_CRYPTO" macro in PolarSSL config.h file.
+ ******************************************************************************
+ * @attention
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+#include "md5.h"
+
+/*
+ * 32-bit integer manipulation macros (little endian)
+ */
+#ifndef GET_UINT32_LE
+#define GET_UINT32_LE(n, b, i) \
+ { \
+ (n) = ((uint32_t)(b)[(i)]) | ((uint32_t)(b)[(i) + 1] << 8) | \
+ ((uint32_t)(b)[(i) + 2] << 16) | ((uint32_t)(b)[(i) + 3] << 24); \
+ }
+#endif
+
+#ifndef PUT_UINT32_LE
+#define PUT_UINT32_LE(n, b, i) \
+ { \
+ (b)[(i)] = (unsigned char)((n)); \
+ (b)[(i) + 1] = (unsigned char)((n) >> 8); \
+ (b)[(i) + 2] = (unsigned char)((n) >> 16); \
+ (b)[(i) + 3] = (unsigned char)((n) >> 24); \
+ }
+#endif
+
+/*
+ * MD5 context setup
+ */
+void md5_starts(md5_context* ctx) {
+ ctx->total[0] = 0;
+ ctx->total[1] = 0;
+
+ ctx->state[0] = 0x67452301;
+ ctx->state[1] = 0xEFCDAB89;
+ ctx->state[2] = 0x98BADCFE;
+ ctx->state[3] = 0x10325476;
+}
+
+void md5_process(md5_context* ctx, const unsigned char data[64]) {
+ uint32_t X[16], A, B, C, D;
+
+ GET_UINT32_LE(X[0], data, 0);
+ GET_UINT32_LE(X[1], data, 4);
+ GET_UINT32_LE(X[2], data, 8);
+ GET_UINT32_LE(X[3], data, 12);
+ GET_UINT32_LE(X[4], data, 16);
+ GET_UINT32_LE(X[5], data, 20);
+ GET_UINT32_LE(X[6], data, 24);
+ GET_UINT32_LE(X[7], data, 28);
+ GET_UINT32_LE(X[8], data, 32);
+ GET_UINT32_LE(X[9], data, 36);
+ GET_UINT32_LE(X[10], data, 40);
+ GET_UINT32_LE(X[11], data, 44);
+ GET_UINT32_LE(X[12], data, 48);
+ GET_UINT32_LE(X[13], data, 52);
+ GET_UINT32_LE(X[14], data, 56);
+ GET_UINT32_LE(X[15], data, 60);
+
+#define S(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+
+#define P(a, b, c, d, k, s, t) \
+ { \
+ a += F(b, c, d) + X[k] + t; \
+ a = S(a, s) + b; \
+ }
+
+ A = ctx->state[0];
+ B = ctx->state[1];
+ C = ctx->state[2];
+ D = ctx->state[3];
+
+#define F(x, y, z) (z ^ (x & (y ^ z)))
+
+ P(A, B, C, D, 0, 7, 0xD76AA478);
+ P(D, A, B, C, 1, 12, 0xE8C7B756);
+ P(C, D, A, B, 2, 17, 0x242070DB);
+ P(B, C, D, A, 3, 22, 0xC1BDCEEE);
+ P(A, B, C, D, 4, 7, 0xF57C0FAF);
+ P(D, A, B, C, 5, 12, 0x4787C62A);
+ P(C, D, A, B, 6, 17, 0xA8304613);
+ P(B, C, D, A, 7, 22, 0xFD469501);
+ P(A, B, C, D, 8, 7, 0x698098D8);
+ P(D, A, B, C, 9, 12, 0x8B44F7AF);
+ P(C, D, A, B, 10, 17, 0xFFFF5BB1);
+ P(B, C, D, A, 11, 22, 0x895CD7BE);
+ P(A, B, C, D, 12, 7, 0x6B901122);
+ P(D, A, B, C, 13, 12, 0xFD987193);
+ P(C, D, A, B, 14, 17, 0xA679438E);
+ P(B, C, D, A, 15, 22, 0x49B40821);
+
+#undef F
+
+#define F(x, y, z) (y ^ (z & (x ^ y)))
+
+ P(A, B, C, D, 1, 5, 0xF61E2562);
+ P(D, A, B, C, 6, 9, 0xC040B340);
+ P(C, D, A, B, 11, 14, 0x265E5A51);
+ P(B, C, D, A, 0, 20, 0xE9B6C7AA);
+ P(A, B, C, D, 5, 5, 0xD62F105D);
+ P(D, A, B, C, 10, 9, 0x02441453);
+ P(C, D, A, B, 15, 14, 0xD8A1E681);
+ P(B, C, D, A, 4, 20, 0xE7D3FBC8);
+ P(A, B, C, D, 9, 5, 0x21E1CDE6);
+ P(D, A, B, C, 14, 9, 0xC33707D6);
+ P(C, D, A, B, 3, 14, 0xF4D50D87);
+ P(B, C, D, A, 8, 20, 0x455A14ED);
+ P(A, B, C, D, 13, 5, 0xA9E3E905);
+ P(D, A, B, C, 2, 9, 0xFCEFA3F8);
+ P(C, D, A, B, 7, 14, 0x676F02D9);
+ P(B, C, D, A, 12, 20, 0x8D2A4C8A);
+
+#undef F
+
+#define F(x, y, z) (x ^ y ^ z)
+
+ P(A, B, C, D, 5, 4, 0xFFFA3942);
+ P(D, A, B, C, 8, 11, 0x8771F681);
+ P(C, D, A, B, 11, 16, 0x6D9D6122);
+ P(B, C, D, A, 14, 23, 0xFDE5380C);
+ P(A, B, C, D, 1, 4, 0xA4BEEA44);
+ P(D, A, B, C, 4, 11, 0x4BDECFA9);
+ P(C, D, A, B, 7, 16, 0xF6BB4B60);
+ P(B, C, D, A, 10, 23, 0xBEBFBC70);
+ P(A, B, C, D, 13, 4, 0x289B7EC6);
+ P(D, A, B, C, 0, 11, 0xEAA127FA);
+ P(C, D, A, B, 3, 16, 0xD4EF3085);
+ P(B, C, D, A, 6, 23, 0x04881D05);
+ P(A, B, C, D, 9, 4, 0xD9D4D039);
+ P(D, A, B, C, 12, 11, 0xE6DB99E5);
+ P(C, D, A, B, 15, 16, 0x1FA27CF8);
+ P(B, C, D, A, 2, 23, 0xC4AC5665);
+
+#undef F
+
+#define F(x, y, z) (y ^ (x | ~z))
+
+ P(A, B, C, D, 0, 6, 0xF4292244);
+ P(D, A, B, C, 7, 10, 0x432AFF97);
+ P(C, D, A, B, 14, 15, 0xAB9423A7);
+ P(B, C, D, A, 5, 21, 0xFC93A039);
+ P(A, B, C, D, 12, 6, 0x655B59C3);
+ P(D, A, B, C, 3, 10, 0x8F0CCC92);
+ P(C, D, A, B, 10, 15, 0xFFEFF47D);
+ P(B, C, D, A, 1, 21, 0x85845DD1);
+ P(A, B, C, D, 8, 6, 0x6FA87E4F);
+ P(D, A, B, C, 15, 10, 0xFE2CE6E0);
+ P(C, D, A, B, 6, 15, 0xA3014314);
+ P(B, C, D, A, 13, 21, 0x4E0811A1);
+ P(A, B, C, D, 4, 6, 0xF7537E82);
+ P(D, A, B, C, 11, 10, 0xBD3AF235);
+ P(C, D, A, B, 2, 15, 0x2AD7D2BB);
+ P(B, C, D, A, 9, 21, 0xEB86D391);
+
+#undef F
+
+ ctx->state[0] += A;
+ ctx->state[1] += B;
+ ctx->state[2] += C;
+ ctx->state[3] += D;
+}
+
+/*
+ * MD5 process buffer
+ */
+void md5_update(md5_context* ctx, const unsigned char* input, size_t ilen) {
+ size_t fill;
+ uint32_t left;
+
+ if(ilen <= 0) return;
+
+ left = ctx->total[0] & 0x3F;
+ fill = 64 - left;
+
+ ctx->total[0] += (uint32_t)ilen;
+ ctx->total[0] &= 0xFFFFFFFF;
+
+ if(ctx->total[0] < (uint32_t)ilen) ctx->total[1]++;
+
+ if(left && ilen >= fill) {
+ memcpy((void*)(ctx->buffer + left), input, fill);
+ md5_process(ctx, ctx->buffer);
+ input += fill;
+ ilen -= fill;
+ left = 0;
+ }
+
+ while(ilen >= 64) {
+ md5_process(ctx, input);
+ input += 64;
+ ilen -= 64;
+ }
+
+ if(ilen > 0) {
+ memcpy((void*)(ctx->buffer + left), input, ilen);
+ }
+}
+
+static const unsigned char md5_padding[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+/*
+ * MD5 final digest
+ */
+void md5_finish(md5_context* ctx, unsigned char output[16]) {
+ uint32_t last, padn;
+ uint32_t high, low;
+ unsigned char msglen[8];
+
+ high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
+ low = (ctx->total[0] << 3);
+
+ PUT_UINT32_LE(low, msglen, 0);
+ PUT_UINT32_LE(high, msglen, 4);
+
+ last = ctx->total[0] & 0x3F;
+ padn = (last < 56) ? (56 - last) : (120 - last);
+
+ md5_update(ctx, md5_padding, padn);
+ md5_update(ctx, msglen, 8);
+
+ PUT_UINT32_LE(ctx->state[0], output, 0);
+ PUT_UINT32_LE(ctx->state[1], output, 4);
+ PUT_UINT32_LE(ctx->state[2], output, 8);
+ PUT_UINT32_LE(ctx->state[3], output, 12);
+}
+
+/*
+ * output = MD5( input buffer )
+ */
+void md5(const unsigned char* input, size_t ilen, unsigned char output[16]) {
+ md5_context ctx;
+
+ md5_starts(&ctx);
+ md5_update(&ctx, input, ilen);
+ md5_finish(&ctx, output);
+
+ memset(&ctx, 0, sizeof(md5_context));
+}
\ No newline at end of file
diff --git a/lib/toolbox/md5.h b/lib/toolbox/md5.h
new file mode 100644
index 00000000000..7878881eb1e
--- /dev/null
+++ b/lib/toolbox/md5.h
@@ -0,0 +1,83 @@
+/**
+ * \file md5.h
+ *
+ * \brief MD5 message digest algorithm (hash function)
+ *
+ * Copyright (C) 2006-2013, Brainspark B.V.
+ *
+ * This file is part of PolarSSL (http://www.polarssl.org)
+ * Lead Maintainer: Paul Bakker
+ *
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#include
+#include
+#include
+
+/**
+ * \brief MD5 context structure
+ */
+typedef struct {
+ uint32_t total[2]; /*!< number of bytes processed */
+ uint32_t state[4]; /*!< intermediate digest state */
+ unsigned char buffer[64]; /*!< data block being processed */
+} md5_context;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief MD5 context setup
+ *
+ * \param ctx context to be initialized
+ */
+void md5_starts(md5_context* ctx);
+
+/**
+ * \brief MD5 process buffer
+ *
+ * \param ctx MD5 context
+ * \param input buffer holding the data
+ * \param ilen length of the input data
+ */
+void md5_update(md5_context* ctx, const unsigned char* input, size_t ilen);
+
+/**
+ * \brief MD5 final digest
+ *
+ * \param ctx MD5 context
+ * \param output MD5 checksum result
+ */
+void md5_finish(md5_context* ctx, unsigned char output[16]);
+
+/* Internal use */
+void md5_process(md5_context* ctx, const unsigned char data[64]);
+
+/**
+ * \brief Output = MD5( input buffer )
+ *
+ * \param input buffer holding the data
+ * \param ilen length of the input data
+ * \param output MD5 checksum result
+ */
+void md5(const unsigned char* input, size_t ilen, unsigned char output[16]);
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/lib/toolbox/path.h b/lib/toolbox/path.h
index fbcf6349982..da9b703daf8 100644
--- a/lib/toolbox/path.h
+++ b/lib/toolbox/path.h
@@ -1,5 +1,6 @@
#pragma once
-#include "m-string.h"
+
+#include
#ifdef __cplusplus
extern "C" {
diff --git a/make/rules.mk b/make/rules.mk
index 627f14c6cc6..48454638e90 100644
--- a/make/rules.mk
+++ b/make/rules.mk
@@ -32,7 +32,7 @@ CHECK_AND_REINIT_SUBMODULES_SHELL=\
fi
$(info $(shell $(CHECK_AND_REINIT_SUBMODULES_SHELL)))
-all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin
+all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin $(OBJ_DIR)/$(PROJECT).dfu
$(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
@echo "\tLD\t" $@
@@ -47,6 +47,13 @@ $(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf
@echo "\tBIN\t" $@
@$(BIN) $< $@
+$(OBJ_DIR)/$(PROJECT).dfu: $(OBJ_DIR)/$(PROJECT).hex
+ @echo "\tDFU\t" $@
+ @hex2dfu \
+ -i $(OBJ_DIR)/$(PROJECT).hex \
+ -o $(OBJ_DIR)/$(PROJECT).dfu \
+ -l "Flipper Zero $(shell echo $(TARGET) | tr a-z A-Z)" > /dev/null
+
$(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS
@echo "\tCC\t" $< "->" $@
@$(CC) $(CFLAGS) -c $< -o $@
@@ -81,21 +88,15 @@ debug: flash
-ex "compare-sections" \
$(OBJ_DIR)/$(PROJECT).elf; \
-openocd:
- openocd $(OPENOCD_OPTS)
-
-bm_debug: flash
- set -m; blackmagic & echo $$! > $(OBJ_DIR)/agent.PID
+debug_other:
arm-none-eabi-gdb-py \
- -ex "target extended-remote 127.0.0.1:2000" \
+ -ex 'target extended-remote | openocd -c "gdb_port pipe" $(OPENOCD_OPTS)' \
-ex "set confirm off" \
- -ex "monitor debug_bmp enable"\
- -ex "monitor swdp_scan"\
- -ex "attach 1"\
- -ex "source ../debug/FreeRTOS/FreeRTOS.py" \
- $(OBJ_DIR)/$(PROJECT).elf; \
- kill `cat $(OBJ_DIR)/agent.PID`; \
- rm $(OBJ_DIR)/agent.PID
+ -ex "source ../debug/PyCortexMDebug/PyCortexMDebug.py" \
+ -ex "svd_load $(SVD_FILE)" \
+
+openocd:
+ openocd $(OPENOCD_OPTS)
clean:
@echo "\tCLEAN\t"
diff --git a/scripts/ReadMe.md b/scripts/ReadMe.md
index e9018984d5e..6517e87edaa 100644
--- a/scripts/ReadMe.md
+++ b/scripts/ReadMe.md
@@ -44,8 +44,12 @@ Also OB may be damaged, so we've made couple scripts to check and set option byt
Checking option bytes:
- ob.py check
+```bash
+ob.py check
+```
Setting option bytes:
- ob.py set
\ No newline at end of file
+```bash
+ob.py set
+```
diff --git a/scripts/flash_core2_ble_swd.sh b/scripts/flash_core2_ble_swd.sh
index df3c741f572..1f04ba816ac 100755
--- a/scripts/flash_core2_ble_swd.sh
+++ b/scripts/flash_core2_ble_swd.sh
@@ -6,7 +6,7 @@ SCRIPT_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
COPRO_DIR="$PROJECT_DIR/lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x"
-STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_FUS_fw_1_0_2.bin 0x080EC000 || true
+STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_FUS_fw_for_fus_0_5_3.bin 0x080EC000 || true
STM32_Programmer_CLI -c port=swd
STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_FUS_fw.bin 0x080EC000 || true
@@ -14,7 +14,7 @@ STM32_Programmer_CLI -c port=swd
STM32_Programmer_CLI -c port=swd -fwdelete
-STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_BLE_Stack_full_fw.bin 0x080CB000 firstinstall=0
+STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_BLE_Stack_full_fw.bin 0x080CA000 firstinstall=0
STM32_Programmer_CLI -c port=swd -ob nSWBOOT0=1 nBOOT0=1
diff --git a/scripts/flipper/__init__.py b/scripts/flipper/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/scripts/flipper/storage.py b/scripts/flipper/storage.py
new file mode 100644
index 00000000000..589c576860f
--- /dev/null
+++ b/scripts/flipper/storage.py
@@ -0,0 +1,375 @@
+import os
+import serial
+import time
+import hashlib
+import math
+
+
+def timing(func):
+ """
+ Speedometer decorator
+ """
+
+ def wrapper(*args, **kwargs):
+ time1 = time.monotonic()
+ ret = func(*args, **kwargs)
+ time2 = time.monotonic()
+ print(
+ "{:s} function took {:.3f} ms".format(
+ func.__name__, (time2 - time1) * 1000.0
+ )
+ )
+ return ret
+
+ return wrapper
+
+
+class BufferedRead:
+ def __init__(self, stream):
+ self.buffer = bytearray()
+ self.stream = stream
+
+ def until(self, eol="\n", cut_eol=True):
+ eol = eol.encode("ascii")
+ while True:
+ # search in buffer
+ i = self.buffer.find(eol)
+ if i >= 0:
+ if cut_eol:
+ read = self.buffer[:i]
+ else:
+ read = self.buffer[: i + len(eol)]
+ self.buffer = self.buffer[i + len(eol) :]
+ return read
+
+ # read and append to buffer
+ i = max(1, self.stream.in_waiting)
+ data = self.stream.read(i)
+ self.buffer.extend(data)
+
+
+class FlipperStorage:
+ CLI_PROMPT = ">: "
+ CLI_EOL = "\r\n"
+
+ def __init__(self, portname: str):
+ self.port = serial.Serial()
+ self.port.port = portname
+ self.port.timeout = 2
+ self.port.baudrate = 115200
+ self.read = BufferedRead(self.port)
+ self.last_error = ""
+
+ def start(self):
+ self.port.open()
+ self.port.reset_input_buffer()
+ # Send a command with a known syntax to make sure the buffer is flushed
+ self.send("device_info\r")
+ self.read.until("hardware_model :")
+ # And read buffer until we get prompt
+ self.read.until(self.CLI_PROMPT)
+
+ def stop(self):
+ self.port.close()
+
+ def send(self, line):
+ self.port.write(line.encode("ascii"))
+
+ def send_and_wait_eol(self, line):
+ self.send(line)
+ return self.read.until(self.CLI_EOL)
+
+ def send_and_wait_prompt(self, line):
+ self.send(line)
+ return self.read.until(self.CLI_PROMPT)
+
+ def has_error(self, data):
+ """Is data has error"""
+ if data.find(b"Storage error") != -1:
+ return True
+ else:
+ return False
+
+ def get_error(self, data):
+ """Extract error text from data and print it"""
+ error, error_text = data.decode("ascii").split(": ")
+ return error_text.strip()
+
+ def list_tree(self, path="/", level=0):
+ """List files and dirs on Flipper"""
+ path = path.replace("//", "/")
+
+ self.send_and_wait_eol('storage list "' + path + '"\r')
+
+ data = self.read.until(self.CLI_PROMPT)
+ lines = data.split(b"\r\n")
+
+ for line in lines:
+ try:
+ # TODO: better decoding, considering non-ascii characters
+ line = line.decode("ascii")
+ except:
+ continue
+
+ line = line.strip()
+
+ if len(line) == 0:
+ continue
+
+ if self.has_error(line.encode("ascii")):
+ print(self.get_error(line.encode("ascii")))
+ continue
+
+ if line == "Empty":
+ continue
+
+ type, info = line.split(" ", 1)
+ if type == "[D]":
+ # Print directory name
+ print((path + "/" + info).replace("//", "/"))
+ # And recursively go inside
+ self.list_tree(path + "/" + info, level + 1)
+ elif type == "[F]":
+ name, size = info.rsplit(" ", 1)
+ # Print file name and size
+ print((path + "/" + name).replace("//", "/") + ", size " + size)
+ else:
+ # Something wrong, pass
+ pass
+
+ def walk(self, path="/"):
+ dirs = []
+ nondirs = []
+ walk_dirs = []
+
+ path = path.replace("//", "/")
+ self.send_and_wait_eol('storage list "' + path + '"\r')
+ data = self.read.until(self.CLI_PROMPT)
+ lines = data.split(b"\r\n")
+
+ for line in lines:
+ try:
+ # TODO: better decoding, considering non-ascii characters
+ line = line.decode("ascii")
+ except:
+ continue
+
+ line = line.strip()
+
+ if len(line) == 0:
+ continue
+
+ if self.has_error(line.encode("ascii")):
+ continue
+
+ if line == "Empty":
+ continue
+
+ type, info = line.split(" ", 1)
+ if type == "[D]":
+ # Print directory name
+ dirs.append(info)
+ walk_dirs.append((path + "/" + info).replace("//", "/"))
+
+ elif type == "[F]":
+ name, size = info.rsplit(" ", 1)
+ # Print file name and size
+ nondirs.append(name)
+ else:
+ # Something wrong, pass
+ pass
+
+ # topdown walk, yield before recursy
+ yield path, dirs, nondirs
+ for new_path in walk_dirs:
+ yield from self.walk(new_path)
+
+ def send_file(self, filename_from, filename_to):
+ """Send file from local device to Flipper"""
+ self.remove(filename_to)
+
+ file = open(filename_from, "rb")
+ filesize = os.fstat(file.fileno()).st_size
+
+ buffer_size = 512
+ while True:
+ filedata = file.read(buffer_size)
+ size = len(filedata)
+ if size == 0:
+ break
+
+ self.send_and_wait_eol(
+ 'storage write_chunk "' + filename_to + '" ' + str(size) + "\r"
+ )
+ answer = self.read.until(self.CLI_EOL)
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ self.read.until(self.CLI_PROMPT)
+ file.close()
+ return False
+
+ self.port.write(filedata)
+ self.read.until(self.CLI_PROMPT)
+
+ percent = str(math.ceil(file.tell() / filesize * 100))
+ total_chunks = str(math.ceil(filesize / buffer_size))
+ current_chunk = str(math.ceil(file.tell() / buffer_size))
+ print(
+ percent + "%, chunk " + current_chunk + " of " + total_chunks, end="\r"
+ )
+ file.close()
+ print()
+ return True
+
+ def read_file(self, filename):
+ """Receive file from Flipper, and get filedata (bytes)"""
+ buffer_size = 512
+ self.send_and_wait_eol(
+ 'storage read_chunks "' + filename + '" ' + str(buffer_size) + "\r"
+ )
+ answer = self.read.until(self.CLI_EOL)
+ filedata = bytearray()
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ self.read.until(self.CLI_PROMPT)
+ return filedata
+ size = int(answer.split(b": ")[1])
+ readed_size = 0
+
+ while readed_size < size:
+ self.read.until("Ready?" + self.CLI_EOL)
+ self.send("y")
+ read_size = min(size - readed_size, buffer_size)
+ filedata.extend(self.port.read(read_size))
+ readed_size = readed_size + read_size
+
+ percent = str(math.ceil(readed_size / size * 100))
+ total_chunks = str(math.ceil(size / buffer_size))
+ current_chunk = str(math.ceil(readed_size / buffer_size))
+ print(
+ percent + "%, chunk " + current_chunk + " of " + total_chunks, end="\r"
+ )
+ print()
+ self.read.until(self.CLI_PROMPT)
+ return filedata
+
+ def receive_file(self, filename_from, filename_to):
+ """Receive file from Flipper to local storage"""
+ with open(filename_to, "wb") as file:
+ data = self.read_file(filename_from)
+ if not data:
+ return False
+ else:
+ file.write(data)
+ return True
+
+ def exist(self, path):
+ """Is file or dir exist on Flipper"""
+ self.send_and_wait_eol('storage stat "' + path + '"\r')
+ answer = self.read.until(self.CLI_EOL)
+ self.read.until(self.CLI_PROMPT)
+
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ return False
+ else:
+ return True
+
+ def exist_dir(self, path):
+ """Is dir exist on Flipper"""
+ self.send_and_wait_eol('storage stat "' + path + '"\r')
+ answer = self.read.until(self.CLI_EOL)
+ self.read.until(self.CLI_PROMPT)
+
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ return False
+ else:
+ if answer.find(b"Directory") != -1:
+ return True
+ elif answer.find(b"Storage") != -1:
+ return True
+ else:
+ return False
+
+ def exist_file(self, path):
+ """Is file exist on Flipper"""
+ self.send_and_wait_eol('storage stat "' + path + '"\r')
+ answer = self.read.until(self.CLI_EOL)
+ self.read.until(self.CLI_PROMPT)
+
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ return False
+ else:
+ if answer.find(b"File, size:") != -1:
+ return True
+ else:
+ return False
+
+ def size(self, path):
+ """file size on Flipper"""
+ self.send_and_wait_eol('storage stat "' + path + '"\r')
+ answer = self.read.until(self.CLI_EOL)
+ self.read.until(self.CLI_PROMPT)
+
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ return False
+ else:
+ if answer.find(b"File, size:") != -1:
+ size = int(
+ "".join(
+ ch
+ for ch in answer.split(b": ")[1].decode("ascii")
+ if ch.isdigit()
+ )
+ )
+ return size
+ else:
+ self.last_error = "access denied"
+ return -1
+
+ def mkdir(self, path):
+ """Create a directory on Flipper"""
+ self.send_and_wait_eol('storage mkdir "' + path + '"\r')
+ answer = self.read.until(self.CLI_EOL)
+ self.read.until(self.CLI_PROMPT)
+
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ return False
+ else:
+ return True
+
+ def remove(self, path):
+ """Remove file or directory on Flipper"""
+ self.send_and_wait_eol('storage remove "' + path + '"\r')
+ answer = self.read.until(self.CLI_EOL)
+ self.read.until(self.CLI_PROMPT)
+
+ if self.has_error(answer):
+ self.last_error = self.get_error(answer)
+ return False
+ else:
+ return True
+
+ def hash_local(self, filename):
+ """Hash of local file"""
+ hash_md5 = hashlib.md5()
+ with open(filename, "rb") as f:
+ for chunk in iter(lambda: f.read(4096), b""):
+ hash_md5.update(chunk)
+ return hash_md5.hexdigest()
+
+ def hash_flipper(self, filename):
+ """Get hash of file on Flipper"""
+ self.send_and_wait_eol('storage md5 "' + filename + '"\r')
+ hash = self.read.until(self.CLI_EOL)
+ self.read.until(self.CLI_PROMPT)
+
+ if self.has_error(hash):
+ self.last_error = self.get_error(hash)
+ return ""
+ else:
+ return hash.decode("ascii")
diff --git a/scripts/ob.data b/scripts/ob.data
index 25a852a5607..2c2d7f6f9f4 100644
--- a/scripts/ob.data
+++ b/scripts/ob.data
@@ -14,7 +14,7 @@ IWDGSTOP:0x1:rw
IWDGSW:0x1:rw
IPCCDBA:0x0:rw
ESE:0x1:r
-SFSA:0xCB:r
+SFSA:0xCA:r
FSD:0x0:r
DDS:0x1:r
C2OPT:0x1:r
@@ -22,7 +22,7 @@ NBRSD:0x0:r
SNBRSA:0xF:r
BRSD:0x0:r
SBRSA:0xA:r
-SBRV:0x32C00:r
+SBRV:0x32800:r
PCROP1A_STRT:0x1FF:r
PCROP1A_END:0x0:r
PCROP_RDP:0x1:r
diff --git a/scripts/storage.py b/scripts/storage.py
new file mode 100755
index 00000000000..739686b693c
--- /dev/null
+++ b/scripts/storage.py
@@ -0,0 +1,267 @@
+#!/usr/bin/env python3
+
+from flipper.storage import FlipperStorage
+import logging
+import argparse
+import os
+import sys
+import binascii
+import posixpath
+
+
+class Main:
+ def __init__(self):
+ # command args
+ self.parser = argparse.ArgumentParser()
+ self.parser.add_argument("-d", "--debug", action="store_true", help="Debug")
+ self.parser.add_argument("-p", "--port", help="CDC Port", required=True)
+ self.subparsers = self.parser.add_subparsers(help="sub-command help")
+
+ self.parser_mkdir = self.subparsers.add_parser("mkdir", help="Create directory")
+ self.parser_mkdir.add_argument("flipper_path", help="Flipper path")
+ self.parser_mkdir.set_defaults(func=self.mkdir)
+
+ self.parser_remove = self.subparsers.add_parser(
+ "remove", help="Remove file/directory"
+ )
+ self.parser_remove.add_argument("flipper_path", help="Flipper path")
+ self.parser_remove.set_defaults(func=self.remove)
+
+ self.parser_read = self.subparsers.add_parser("read", help="Read file")
+ self.parser_read.add_argument("flipper_path", help="Flipper path")
+ self.parser_read.set_defaults(func=self.read)
+
+ self.parser_size = self.subparsers.add_parser("size", help="Size of file")
+ self.parser_size.add_argument("flipper_path", help="Flipper path")
+ self.parser_size.set_defaults(func=self.size)
+
+ self.parser_receive = self.subparsers.add_parser("receive", help="Receive file")
+ self.parser_receive.add_argument("flipper_path", help="Flipper path")
+ self.parser_receive.add_argument("local_path", help="Local path")
+ self.parser_receive.set_defaults(func=self.receive)
+
+ self.parser_send = self.subparsers.add_parser(
+ "send", help="Send file or directory"
+ )
+ self.parser_send.add_argument(
+ "-f", "--force", help="Force sending", action="store_true"
+ )
+ self.parser_send.add_argument("local_path", help="Local path")
+ self.parser_send.add_argument("flipper_path", help="Flipper path")
+ self.parser_send.set_defaults(func=self.send)
+
+ self.parser_list = self.subparsers.add_parser(
+ "list", help="Recursively list files and dirs"
+ )
+ self.parser_list.add_argument("flipper_path", help="Flipper path", default="/")
+ self.parser_list.set_defaults(func=self.list)
+
+ # logging
+ self.logger = logging.getLogger()
+
+ def __call__(self):
+ self.args = self.parser.parse_args()
+ if "func" not in self.args:
+ self.parser.error("Choose something to do")
+ # configure log output
+ self.log_level = logging.DEBUG if self.args.debug else logging.INFO
+ self.logger.setLevel(self.log_level)
+ self.handler = logging.StreamHandler(sys.stdout)
+ self.handler.setLevel(self.log_level)
+ self.formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
+ self.handler.setFormatter(self.formatter)
+ self.logger.addHandler(self.handler)
+ # execute requested function
+ self.args.func()
+
+ def mkdir(self):
+ storage = FlipperStorage(self.args.port)
+ storage.start()
+ self.logger.debug(f'Creating "{self.args.flipper_path}"')
+ if not storage.mkdir(self.args.flipper_path):
+ self.logger.error(f"Error: {storage.last_error}")
+ storage.stop()
+
+ def remove(self):
+ storage = FlipperStorage(self.args.port)
+ storage.start()
+ self.logger.debug(f'Removing "{self.args.flipper_path}"')
+ if not storage.remove(self.args.flipper_path):
+ self.logger.error(f"Error: {storage.last_error}")
+ storage.stop()
+
+ def receive(self):
+ storage = FlipperStorage(self.args.port)
+ storage.start()
+
+ if storage.exist_dir(self.args.flipper_path):
+ for dirpath, dirnames, filenames in storage.walk(self.args.flipper_path):
+ self.logger.debug(
+ f'Processing directory "{os.path.normpath(dirpath)}"'.replace(
+ os.sep, "/"
+ )
+ )
+ dirnames.sort()
+ filenames.sort()
+
+ rel_path = os.path.relpath(dirpath, self.args.flipper_path)
+
+ for dirname in dirnames:
+ local_dir_path = os.path.join(
+ self.args.local_path, rel_path, dirname
+ )
+ local_dir_path = os.path.normpath(local_dir_path)
+ os.makedirs(local_dir_path, exist_ok=True)
+
+ for filename in filenames:
+ local_file_path = os.path.join(
+ self.args.local_path, rel_path, filename
+ )
+ local_file_path = os.path.normpath(local_file_path)
+ flipper_file_path = os.path.normpath(
+ os.path.join(dirpath, filename)
+ ).replace(os.sep, "/")
+ self.logger.info(
+ f'Receiving "{flipper_file_path}" to "{local_file_path}"'
+ )
+ if not storage.receive_file(flipper_file_path, local_file_path):
+ self.logger.error(f"Error: {storage.last_error}")
+
+ else:
+ self.logger.info(
+ f'Receiving "{self.args.flipper_path}" to "{self.args.local_path}"'
+ )
+ if not storage.receive_file(self.args.flipper_path, self.args.local_path):
+ self.logger.error(f"Error: {storage.last_error}")
+ storage.stop()
+
+ def send(self):
+ storage = FlipperStorage(self.args.port)
+ storage.start()
+ self.send_to_storage(
+ storage, self.args.flipper_path, self.args.local_path, self.args.force
+ )
+ storage.stop()
+
+ # send file or folder recursively
+ def send_to_storage(self, storage, flipper_path, local_path, force):
+ if not os.path.exists(local_path):
+ self.logger.error(f'Error: "{local_path}" is not exist')
+
+ if os.path.isdir(local_path):
+ # create parent dir
+ self.mkdir_on_storage(storage, flipper_path)
+
+ for dirpath, dirnames, filenames in os.walk(local_path):
+ self.logger.debug(f'Processing directory "{os.path.normpath(dirpath)}"')
+ dirnames.sort()
+ filenames.sort()
+ rel_path = os.path.relpath(dirpath, local_path)
+
+ # create subdirs
+ for dirname in dirnames:
+ flipper_dir_path = os.path.join(flipper_path, rel_path, dirname)
+ flipper_dir_path = os.path.normpath(flipper_dir_path).replace(
+ os.sep, "/"
+ )
+ self.mkdir_on_storage(storage, flipper_dir_path)
+
+ # send files
+ for filename in filenames:
+ flipper_file_path = os.path.join(flipper_path, rel_path, filename)
+ flipper_file_path = os.path.normpath(flipper_file_path).replace(
+ os.sep, "/"
+ )
+ local_file_path = os.path.normpath(os.path.join(dirpath, filename))
+ self.send_file_to_storage(
+ storage, flipper_file_path, local_file_path, force
+ )
+ else:
+ self.send_file_to_storage(storage, flipper_path, local_path, force)
+
+ # make directory with exist check
+ def mkdir_on_storage(self, storage, flipper_dir_path):
+ if not storage.exist_dir(flipper_dir_path):
+ self.logger.debug(f'"{flipper_dir_path}" not exist, creating')
+ if not storage.mkdir(flipper_dir_path):
+ self.logger.error(f"Error: {storage.last_error}")
+ else:
+ self.logger.debug(f'"{flipper_dir_path}" already exist')
+
+ # send file with exist check and hash check
+ def send_file_to_storage(self, storage, flipper_file_path, local_file_path, force):
+ if not storage.exist_file(flipper_file_path):
+ self.logger.debug(
+ f'"{flipper_file_path}" not exist, sending "{local_file_path}"'
+ )
+ self.logger.info(f'Sending "{local_file_path}" to "{flipper_file_path}"')
+ if not storage.send_file(local_file_path, flipper_file_path):
+ self.logger.error(f"Error: {storage.last_error}")
+ elif force:
+ self.logger.debug(
+ f'"{flipper_file_path}" exist, but will be overwritten by "{local_file_path}"'
+ )
+ self.logger.info(f'Sending "{local_file_path}" to "{flipper_file_path}"')
+ if not storage.send_file(local_file_path, flipper_file_path):
+ self.logger.error(f"Error: {storage.last_error}")
+ else:
+ self.logger.debug(
+ f'"{flipper_file_path}" exist, compare hash with "{local_file_path}"'
+ )
+ hash_local = storage.hash_local(local_file_path)
+ hash_flipper = storage.hash_flipper(flipper_file_path)
+
+ if not hash_flipper:
+ self.logger.error(f"Error: {storage.last_error}")
+
+ if hash_local == hash_flipper:
+ self.logger.debug(
+ f'"{flipper_file_path}" are equal to "{local_file_path}"'
+ )
+ else:
+ self.logger.debug(
+ f'"{flipper_file_path}" are not equal to "{local_file_path}"'
+ )
+ self.logger.info(
+ f'Sending "{local_file_path}" to "{flipper_file_path}"'
+ )
+ if not storage.send_file(local_file_path, flipper_file_path):
+ self.logger.error(f"Error: {storage.last_error}")
+
+ def read(self):
+ storage = FlipperStorage(self.args.port)
+ storage.start()
+ self.logger.debug(f'Reading "{self.args.flipper_path}"')
+ data = storage.read_file(self.args.flipper_path)
+ if not data:
+ self.logger.error(f"Error: {storage.last_error}")
+ else:
+ try:
+ print("Text data:")
+ print(data.decode())
+ except:
+ print("Binary hexadecimal data:")
+ print(binascii.hexlify(data).decode())
+ storage.stop()
+
+ def size(self):
+ storage = FlipperStorage(self.args.port)
+ storage.start()
+ self.logger.debug(f'Getting size of "{self.args.flipper_path}"')
+ size = storage.size(self.args.flipper_path)
+ if size < 0:
+ self.logger.error(f"Error: {storage.last_error}")
+ else:
+ print(size)
+ storage.stop()
+
+ def list(self):
+ storage = FlipperStorage(self.args.port)
+ storage.start()
+ self.logger.debug(f'Listing "{self.args.flipper_path}"')
+ storage.list_tree(self.args.flipper_path)
+ storage.stop()
+
+
+if __name__ == "__main__":
+ Main()()