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()()