Начало работы на OSX?

Кенджуцу
Пт 29 мая 2015 12:20
Всем привет,

У меня есть следующее STM32F103C8T6 ARM STM32 Минимальный модуль разработки системы и хотел бы начать использовать его под OS X. У меня также есть плата STM Nucleo F411RE с ST-Link/V2-1 и FT232RL USB в серийный адаптер модуль.

Может ли кто -нибудь, пожалуйста, направить меня к работе под OSX? ;)

Рик Кимбалл
Пт 29 мая 2015 г. 13:02
Вы можете попробовать посмотреть это видео:

https: // www.YouTube.com/watch?v = g_rf0a0hrak

Это покажет вам, как подключить FTDI и использовать метод последовательной загрузки в IDE.

Ахулл
Пт 29 мая 2015 г., 13:24
В вики есть некоторая информация, но, вероятно, нужно обновлять.
https: // github.com/rogerclarkmelbourne/ ... /Apple-OSX

Кенджуцу
Пт 29 мая 2015 г., 16:33
Спасибо всем.

Я все загрузил и установил. Скомпилирование обязательного мигания идет без зацепления, но при попытке загрузить, я получаю следующее:
stm32flash 0.4 Cannot handle device "/dev/cu.usbserial-A943NTHT" Failed to open port: /dev/cu.usbserial-A943NTHT http://stm32flash.googlecode.com/ Using Parser : Raw BINARY

Рик Кимбалл
Пт 29 мая 2015 г., 17:18
Этот материал действительно не готов к массам.

Вы должны быть в состоянии выбрать свою плату и компилировать код для общего F103C8. Вы должны убедиться, что у вас выбрано устройство FTDI в качестве порта. Убедитесь, что перемычка для Boot0 подключена высокой. Затем нажмите сброс на доске F103C8. Он должен перейти в встроенный режим загрузки STM32F103. Затем просто нажмите загруженный. Если это не займет, попробуйте снова нажать сброс и загрузить. Если это не работает, ваши последовательные соединения проводки неверны, или у вас есть неправильное устройство FTDI. Или есть какая -то другая проблема, связанная с OSX.

Sheepdoll
Пт 29 мая 2015 г., 17:23
Ахулл написал:В вики есть некоторая информация, но, вероятно, нужно обновлять.
https: // github.com/rogerclarkmelbourne/ ... /Apple-OSX

Sheepdoll
Пт 29 мая 2015 г., 17:46
Рик Кимбалл написал:Этот материал действительно не готов к массам.

Zoomx
Сб 30 мая 2015 г. 13:05
Кенджуцу писал: ***************************************************************** * * * STM32×îСϵͳ°åRTC²âÊÔºóÑ­»·µãÁÁPC13¶ËµÄLED! ^_^ * * * ***************************************************************** ·¢ÉúÒ»´ÎÍⲿ¸´Î».... ²»ÐèÒªÉèÖÃRCT.... Time: 2013-11-13 02:31:50

Rogerclark
Солнце 31 мая 2015 г. 6:50 утра
@Kenjutsu
Если вы загружаете, используя USB -серийный адаптер, вам нужно выбрать «серийный» в меню метода загрузки

Вам также нужно иметь ссылку на прыжок Boot0 в другой позиции I.E Boot0 High

После завершения загрузки код будет запущен

Однако, если вы нажмете кнопку сброса или отключите питание и т. Д., Плата вернется в режим загрузки (встроенный последовательный загрузчик)

Re: Странный персонаж в серийном мониторе

Вы установили скорость передачи.G сериал.Начните (115200) и проверьте, у вас есть та же настройка в серийном мониторе.

Re: STM Nucleo F411RE

Это может вообще не работать на OSX, это будет зависеть, если прошивка STLINK совместима с загрузчиком STLINK с открытым исходным кодом, который используется Texane Stlink

Вы можете попробовать использовать опцию Discovery F407, но если он не работает, у нас нет решения в настоящее время.
Однако я намерен посмотреть, будет ли OpenOCD работать вместо Texane Stlink, когда у меня есть время.

(Обратите внимание, что это проблема OSX, потому что, насколько мне известно, STM вообще не поддерживает загрузки через STLINK на OSX, поэтому мы даже не можем использовать загрузчик с закрытым источником на OSX (как мы можем в Windows)

Sheepdoll
Солнце 31 мая 2015 г. 8:35 утра
Rogerclark написал: (Обратите внимание, что это проблема OSX, потому что, насколько мне известно, STM вообще не поддерживает загрузки через STLINK на OSX, поэтому мы даже не можем использовать загрузчик с закрытым источником на OSX (как мы можем в Windows)

Rogerclark
Солнце 31 мая 2015 г. 9:57 утра
@sheepdoll

Re: Stlink на OSX

Извини. То, что я сказал, было немного запутанным

Насколько мне известно, STM не производят никаких программных утилит, которые позволяют загрузить устройства STLINK на OSX или Linux, но у них есть версия GUI Windows и CLI

http: // www.ул.com/web/en/catalog/tools/pf258168

Однако есть Texane Stlink с открытым исходным кодом

https: // github.com/texane/stlink

который мы используем на OSX и Linux.

Мы также использовали его и в Windows, но, похоже, он не работает с некоторыми платами Stlink (в частности, на некоторых платах F4, и это не работает с моей доской F3 ucleo)).

Итак, в Windows я вернулся в CLI Exe STM (закрытый исходный код), я загружаю с веб -сайта STM и добавил в репо (насколько я могу судить, лицензия STM допускает это)


Поэтому я думаю, что вам частично повезло, что у вас есть доски, работайте с Texane Stlink.


Очевидно (информация из Рика Кимбалла), она OpenOcd http: // openocd.орг/ совместим с устройствами STLINK и может поддерживать более широкий диапазон STLINK FURNWARES (но версия OpenOCD должна составить в него STLINK - то есть ее необязательно)

Так что, если у меня появится шанс попытаться проверить, используя openocd в качестве альтернативы Texane Stlink, в основном для OSX и Linux

Кенджуцу
Солнце 31 мая 2015 г., 10:23
Спасибо за все ответы.

Я использую OS X 10.9.5 с Arduino IDE 1.6.4. Мое USB -серийное устройство, как указано в моем первом посте, а также в моей плате STM32F1.

Мои настройки Arduino IDE следующие:
  • Доска: Generic STM32F103C Series
  • Вариант: STM32F103C8 (Flash 20K 64K)
  • Метод загрузки: серийный
  • Порт: /dev /cu.USBERIAL-A943NTHT
Пример программы: void setup() { // initialize digital pin PC13 as an output. pinMode(PC13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a half second digitalWrite(PC13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }

Rogerclark
Солнце 31 мая 2015 г., 10:40
Глядя на сообщения об ошибках, похоже, что STM32Flash не совместим с USB -последовательным устройством, которое вы используете.

Есть и другие альтернативы, но вам нужно будет внести какую -то изменение кода

В папке «Инструмент/победа» есть версия серийного загрузчика,

STM32Loader.пирог

Если вы посмотрите в serial_upload.летучая мышь (в инструментах/победе) в строке 12
rem: C:\Python27\python.exe stm32loader.py -e -w -p %1 -g -b 115200 %str%

Sheepdoll
Солнце 31 мая 2015 г. 16:57
Rogerclark написал:Глядя на сообщения об ошибках, похоже, что STM32Flash не совместим с USB -последовательным устройством, которое вы используете

Рик Кимбалл
Солнце 31 мая 2015 г., 17:43
Sheepdoll написал:Texane-Stlink, с другой стороны, хорошо поддерживается на OSX. Репо в настоящее время активно активно с недавними обновлениями. В основном для GDB. Поскольку я не установил Eclipse (скачал его пару раз, но никогда не распаковал его.) У меня нет способа использования GDB.

Кенджуцу
Пн июня 01, 2015, 7:02 утра
@ Rogerclark

Согласно вашим инструкциям, я добавил следующую (измененную) линию в serial_upload:

питон $ (dirname $ 0)/stm32loader.пирог -E -W -P /dev/"$ 1" -G -B 115200 "4 доллара"

Это сделало свое дело 8-)

"Спасибо" всем, кто помог мне получить эту работу ;)

Rogerclark
Пн июня 01, 2015, 9:28 утра
@Kenjutsu

Я рад, что это работает для тебя.

Если я получу шанс, я добавлю линию в сценарий, но прокомментируйте ее, чтобы, если у кого -то еще есть проблема с их USB -серийным устройством, не совместимым с STM32Flash, они могут вместо этого попробовать Python.


На самом деле, думая об этом, у меня была похожая проблема в Windows.

В Windows проблема заключалась в том, что он будет обрабатывать только номера Path Com от 1 до 9 и не обрабатывать двузначные цифры.

Возможно, что проблема, которую STM32Flash на OSX имеет ограничение на максимальную длину имени устройства.

Я думаю, вы сказали, что ваше название устройства было

/dev/cu.USBERIAL-A943NTHT

Или, возможно, проблема - чувствительность к случаю ???

Я подозреваю, что может быть возможно исправить STM32FLASH, а источник находится в/Tools/SRC/STM32FLASH_SERIAL/SRC

В любом случае. Я буду регистрировать это как ошибку в GitHub, если кто -то захочет искать возможные причины и исправления

Кенджуцу
Пн июня 01, 2015, 10:15 утра
Спасибо Rogerclark

В течение следующих 10 дней я получу CH340 USB 2.От 0 до TTL серийный преобразователь Что я буду проверять с помощью STM32Flash и сообщить здесь :)

Rogerclark
Пн июня 01, 2015, 10:22 утра
ХОРОШО

Спасибо.

Я подозреваю, что проблема - небольшая ошибка в STM32Flash, которую вы можете решить, но я не могу решить, так как все мои серийные администраторы USB работают нормально на OSX, поэтому я не могу повторить вашу проблему

Кенджуцу
Пн июня 01, 2015, 11:21
Я видел под /Дев Следующая запись:

CRW-RW-RW- 1 Корневое колесо 18, 64 июня 1 13:15 TTY.USBERIAL-A943NTHT

Затем я пошел в каталог STM32Flash и выполнил:

./stm32flash /dev /tty.USBERIAL-A943NTHT

вместо:

./stm32flash /dev /cu.USBERIAL-A943NTHT

И результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB

Rogerclark
Пн, 01 июня 2015 г., 11:31
Ммм

Хорошо.

Похоже на проблему с IDE, сообщающей о неправильном последовательном устройстве ?

Кенджуцу
Пн июня 01, 2015 11:51
Да, кажется, что. Я протестировал версию 1.6.1 IDE и под «портами», он показывает только /dev /tty.Usserial Device, которое после изменения serial_upload позвонить STM32Flash Опять же, он может успешно загрузить на доску... :?

Rogerclark
Пн июня 01, 2015 12:04
Не уверен, если 1.6.4 лучше, но вы можете попробовать это.

Но если вы сделаете. Помните, что компилятор ARM не установлен по умолчанию после 1.6.2 Таким образом, вам нужно установить, чтобы вернуть его.

Кенджуцу
Пн июня 01, 2015 12:38
Я изначально начал тестировать его до 1.6.4. что показывает /dev /cu.USBERIAL

Кенджуцу
Пн, 01 июня 2015 г., 18:09
Как «быстрое исправление», я скачал str_replace функционировать из «сети» и включить в функцию parse_options в основном.C STM32Flash. Простой если оператор, чтобы проверить, содержит ли путь устройства "/dev/cu."А если так, заменить"/dev/tty."

Может быть, что -то подобное будет полезно? Если так, где я должен вставить код?

Кенджуцу
Вторник 02 июня 2015 г., 17:14
По просьбе Rogerclark, Я открыл новый выпуск на Arduino IDE Repo: [1.6.4.] [OSX] Недопустимые названия портов #3275. Решение было также дано ffissore И я могу подтвердить, что это действительно работает 8-)

Снова, Спасибо всем за помощь и быть терпеливым со мной ;)

Rogerclark
Вторник 02 июня 2015 г., 21:41
Хорошо

Спасибо.


Звучит как странная «особенность» для меня, если они скрывают несколько портов.

Но, по крайней мере, мы знаем, что случилось

Энтони -декларк
Вт 16 июня 2015 г., 8:51 вечера
Новичок здесь! Использование Arduino IDE 1.6.4

Я пытаюсь играть с Maple Mini V3: http: // www.eBay.компонент.AU/ITM/400766548945

На OSX, поверьте, я старательно следовал всем инструкциям по установке здесь: https: // github.com/rogerclarkmelbourne/ ... занижаем

1) Когда я составляю примерную программу отсюда: https: // www.хакерс.io/rayburne/oled-on-the-дешевле
Я понимаю это - adafruit_gfx.CPP: 5: 28: фатальная ошибка: .\ Adafruit_gfx.H: нет такого файла или каталога
#включать ".\ Adafruit_gfx.час"
^
Компиляция завершена.
Ошибка компиляции.

2) Я вижу доски в Arduino IDE, но нет серийного порта.

Если я перейду на терминал и LS /dev /tty.USB*, ничего не видите (не уверен, является ли это действительным тестом)

Любые советы?

Спасибо

Rogerclark
Вт 16 июня 2015 г., 21:47
Энтони

Какую версию OSX вы используете ?

Я подозреваю, что причина, по которой вы не видите никаких последовательных портов, заключается в том, что поставщик не загрузил действительную программу, e.глин. Мигать в кленовый мини -.

В любом случае, вам нужно поместить доску в режим вечного загрузчика.
Нажмите сброс, затем нажмите и удерживайте другую кнопку, в течение примерно 2 секунд, пока светодиод не мигает примерно два раза в секунду.
Когда вы отпускаете кнопку, светодиод должен продолжать вспыхивать.
На этом этапе плата заблокирована в режиме загрузки, и нет последовательного устройства (но это нормально).

Скомпилируйте и загружайте и пустого наброска, и тогда вы должны иметь последовательное устройство.


Вы видите любые USB -порты, появляющиеся в IDE вообще, что может быть Maple Mini?

Кроме того, см. Предыдущие несколько сообщений, в IDE есть функция, которая скрывает некоторые порты, поэтому вам может потребоваться отредактировать файл предпочтений для IDE (к сожалению, мы не контролируем то, что делает команда IDE)

Вы также можете посмотреть в системный профилировщик
https: // pim.Famnit.UPR.Si/blog/index.pH ... lsusb.HTML

Re: Проблема с конкретным примером.

Ммм. Я подозреваю, что это пример, это проблема, а не Mac.

Попробуйте собрать Blink, чтобы начать с. Штифт для светодиода на Maple Mini

PB1

(Примечание Leaflabs решила использовать штифты в стиле Arduino на своих платах, что хорошо, если у вас есть Maple Mini, однако многие люди используют не кленовое оборудование, и мы склонны использовать настоящие имена для булавок, E.G PB1, я.E PORT B ​​PIN 1)

Примечание.
Я сделал обновление, чтобы исправить OSX около 8 часов назад, без этого обновления, доска не сбросится до загрузки, и должен был быть сделан вручную.

См. Раздел объявлений, так как вам может потребоваться обновить свои файлы или загрузить совершенно новую копию.

Энтони -декларк
Вт 16 июня 2015 г. 11:07
Спасибо, много, чтобы попробовать позже...

Чтобы ответить на некоторые вопросы, используя последнюю OSX

Когда я включаю Maple Mini, светодиод постепенно вспыхивает, это будет мигать, или это светодиод статуса?

Я вообще не вижу последовательных портов.....

Вернется позже.... Спасибо!

Mrburnette
Вт 16 июня 2015 г. 11:15
AnthonyJclarke написал:Спасибо, много, чтобы попробовать позже...

Чтобы ответить на некоторые вопросы, используя последнюю OSX

Когда я включаю Maple Mini, светодиод постепенно вспыхивает, это будет мигать, или это светодиод статуса?

Я вообще не вижу последовательных портов.....

Вернется позже.... Спасибо!

Энтони -декларк
Вт 16 июня 2015 г. 11:31
Спасибо, мистер б....

Я сделал установку DFU в соответствии с: https: // github.com/rogerclarkmelbourne/ ... занижаем

"Установите DFU Utils. Самый простой способ сделать это - использовать домашний завод http: // brew.шон - Смотрите нижнюю часть страницы Homebrew.

Затем введите «Brew установить dfu-util» в окне терминала для установки »

Я вижу «сериал»... Но нет tty.usbmodemxxxxx (где xxxxx, кажется, варьируется)

Mrburnette
Вт 16 июня 2015 г. 11:49
AnthonyJclarke написал: ...
Я вижу «сериал»... Но нет tty.usbmodemxxxxx (где xxxxx, кажется, варьируется)

Rogerclark
Вт 16 июня 2015 г. 11:55
Трудно сказать, будет ли он запускает мигание или загрузчик ждет загрузки.

Я думаю, что это, скорее всего, просто станет загрузчиком, так как мини -платы клона клона не всегда устанавливают Blink, потому что поставщики не хотят, чтобы убедить Blink, а также установку загрузчика.

КСТАТИ.

Когда вы получите его работу, вы, вероятно, должны повторно сключить загрузчик. Те, с которыми поставляются клонированные Maple Minis, - это оригинальный загрузчик, написанный в 2012 году Leaflabs

Недавно мы переработали загрузчик, и загрузки теперь существенно быстрее на OSX (и Linux), и вы также получаете 12 тыс. Флэш и 3K оперативной памяти, так как STM32Duino-Bootloader снимается с оптимизациями, что первоначальный не был.

Sheepdoll
Ср 17 июня 2015 г. 12:03
У меня уже была установка Macports на моей машине (-ах). Хорошо работает со Stlink. Я еще не пытался сделать нагрузку DFU. Одно примечание при установке DFU и других инструментов, которые используют Libusb с Macports, они используют другой путь, чем Brew. Я только что сделал символическую ссылку.

Rogerclark
Ср 17 июня 2015 г. 12:05
Я испытываю желание просто скопировать двоичные файлы osx dfu в инструменты/macosx, так как это может быть намного проще для людей, чем для необходимости установить Homebrew, а затем установить DFU-UTIL, но я не уверен, что Homebrew изменит какие-либо правила и т. Д. Позвольте DFU-UTIL работать. Мне нужно поэкспериментировать на Mac, который я уже не установил DFU-UTIL

Rogerclark
Ср 17 июня 2015 г. 12:14
Я только что открыл новый Maple Mini (клон), и, похоже, он установил Blink, и я вижу серийное устройство Maple USB (в Windows)

Если вспышка включена в течение 1 секунды в течение 1 секунды, вероятно, будет мигать.

Если он включен на 1/2 секунды в течение 1/2 секунды, вероятно, загрузчик, говорящий, что ему нечего запустить. В этом случае у вас не будет последовательного устройства.
Так что просто загрузите пустой набросок, а затем вы должны увидеть последовательное устройство (имя кажется различным)

Энтони -декларк
Ср 17 июня 2015 г., 7:01
Так ценю всю помощь здесь... Полностью отреагируйте после того, как «тихое время дома» (тест!)....

А пока это то, что я вижу, когда подключаю.... (кто -то здесь может заметить, что я пытаюсь построить!)

http: // youtu.be/e5g2f-tau78

Спасибо!

Rogerclark
Ср 17 июня 2015 г., 7:14
Энтони

Скорость вспышки выглядит так, как будто в режиме загрузки DFU, я.E Blink не было установлено.

Поэтому просто игнорируйте, что вы не можете увидеть последовательное устройство USB Maple (оно не будет запущено, поскольку оно застряло в загрузчике, так как нет действительного кода для загрузки для запуска

Bootloader проверяет адрес начала программы (0x8005000 на вашем клене со старым загрузчиком), и если он не может найти действительный адрес указателя стека в первых 4 байтах, он остается в ожидании загрузки DFU.

Re: дисплей, который вы используете.

У меня есть один из них, но я не проверил его. Из того, что я помню, @madias использовал этот дисплей.
Я думаю, что вы можете использовать пример кода Рэя, извините, я не могу вспомнить, кто написал, какой либера

Но я думаю, что есть сильная вероятность, что вы получите это довольно легко сработать

Кенджуцу
Чт 18 июня 2015 г., 18:22
Сегодня я получил свой "5pcs/lot Leaflabs Leaf Maple Mini Arm STM32 Совместимость"От aliexpress. Я подключил один в свой Mac, и он также не был распознан/назначен последовательным портом, и кажется, что он находится в вечный режим загрузчика, Но, следуя инструкциям здесь, я загрузил Мигание Пример, и теперь у него есть собственный серийный порт (/dev/tty.usbmodemfa1331).

Завтра я припаю заголовок и попробую новый загрузчик 8-)

Rogerclark
Чт 18 июня 2015 г. 9:06 вечера
примечание.

Посмотрите на одну из других разделов (извините, я не могу вспомнить, какой из них), но плоскость заземления на некоторых Maple Minis теперь очень близка к булавкам.

Поэтому при пайке, убедитесь, что вы не случайно не сокращаете штифты в GND

Mrburnette
Чт 18 июня 2015 г. 11:14
Rogerclark написал:примечание.

Смотрите один из других разделов (извините Я не могу вспомнить, какой), но плоскость заземления на некоторых Maple Minis теперь очень близка к булавкам.

Поэтому при пайке, убедитесь, что вы не случайно не сокращаете штифты в GND

Rogerclark
Чт 18 июня 2015 г., 23:28
Спасибо, Рэй.

Энтони -декларк
Пт 19 июня 2015 г., 21:33
Извините, я вернулся :(

Попробовал полной новой попытки на другом Mac.... У меня есть странная проблема на моем iMac, когда вы делаете вещи Arduino, и это не распознавание определенных USB -чипсетов.... Но всегда работает на этом Mac!

Заполните установку в соответствии с инструкциями.... Но когда я пытаюсь скомпилировать....

Невозможно запустить программу »{время выполнения.инструменты.ARM-None-Eabi-GCC.Путь}/bin/arm-none-eabi-g ++ "(в каталоге"."): error = 2, нет такого файла или каталога

Любые идеи?

Mrburnette
Пт 19 июня 2015 г., 21:42
AnthonyJclarke написал: <...>
Невозможно запустить программу »{время выполнения.инструменты.ARM-None-Eabi-GCC.Путь}/bin/arm-none-eabi-g ++ "(в каталоге"."): error = 2, нет такого файла или каталога

Любые идеи?

Энтони -декларк
Пт 19 июня 2015 г., 21:51
@Ray, упс ;-)

Делаю сейчас...

Пока я делаю это - на основе моей доски http: // i.Имгур.com/uj9uiqq.JPG какую доску в Arduino Ide я должен выбрать?

Спасибо!

Rogerclark
Пт 19 июня 2015 г., 22:02
Похоже, вы не установили Due in the Boards Manager.

Компилятор ARM раньше был установлен по умолчанию, но команда IDE постоянно притягивается к тому, установлен ли компилятор ARM по умолчанию и даже где они его поместят.

Возможно, команда IDE что -то встала на 1.6.5 на OSX. Я знаю, что они испортились на окнах и должны были выпустить 1.6.5.R2, так возможно, что в версии 1 OSX есть ошибки.6.5 для сторонних ядер, с которыми вы первые столкнулись

Я бы порекомендовал вам установить 1.6.4, а затем используйте диспетчер Boards для установки срок, это даст вам компилятор ARM в правильном месте.

Или пройдите по темной стороне и используйте Arduino.Копия org Arduino IDE, которая по умолчанию устанавливает компилятор ARM.

Mrburnette
Пт 19 июня 2015 г. 22:09
AnthonyJclarke написал:@Ray, упс ;-)

Делаю сейчас...

Пока я делаю это - на основе моей доски http: // i.Имгур.com/uj9uiqq.JPG какую доску в Arduino Ide я должен выбрать?

Спасибо!

Энтони -декларк
Пт 19 июня 2015 г., 22:15
@Roger, очень ценю вашу помощь здесь...

Я почти там (я думаю)....

Итак, менеджер плат установлен, теперь компилирует мигание чисто...

Я нажимаю и пробую все перестановки «В любом случае, вам нужно поместить доску в режим вечного загрузчика.
Нажмите сброс, затем нажмите и удерживайте другую кнопку, в течение примерно 2 секунд, пока светодиод не мигает примерно два раза в секунду.
Когда вы отпускаете кнопку, светодиод должен продолжать вспыхивать."

Однако у меня есть серийный порт, показывающий в нижней части окна IDE: http: // i.Имгур.com/jyxktxq.пнн

При загрузке я получаю это:


Sketch использует 12 764 байта (11%) пространства для хранения программ. Максимум составляет 108 000 байтов.
Глобальные переменные используют 3264 байта динамической памяти.
Ява.io.IoException: не может запустить программу "/users/anthonyjclarke/documents/arduino/ardware/arduino_stm32/tools/macosx/maple_upload": error = 13, разрешение отказано
в Java.ланг.Процесс -строитель.запустить (процесс -застройщик.Java: 1048)
в Java.ланг.Время выполнения.Exec (время выполнения.Java: 620)
в Java.ланг.Время выполнения.Exec (время выполнения.Java: 485)
при обработке.приложение.Помощники.Процессы.exec (Processutils.Java: 11)
в CC.Ардуино.пакеты.Загрузчик.executeuploadcommand (загрузчик.Java: 115)
в CC.Ардуино.пакеты.загрузчики.Serialuploader.uploadUsingPreferences (SerialUploAder.Java: 158)
при обработке.приложение.отлаживать.Компилятор.загрузить (компилятор.Java: 165)
при обработке.приложение.Набросок.загрузить (эскиз.Java: 1167)
при обработке.приложение.Набросок.ExportApplet (эскиз.Java: 1141)
при обработке.приложение.Набросок.ExportApplet (эскиз.Java: 1113)
при обработке.приложение.Редактор $ defaultexporthandler.Беги (редактор.Java: 2380)
в Java.ланг.Нить.запустить (нить.Java: 745)
Вызвано: Java.io.IoException: error = 13, разрешение отказано
в Java.ланг.UnixProcess.forkandexec (нативный метод)
в Java.ланг.UnixProcess.<инициатор>(UnixProcess.Java: 248)
в Java.ланг.ProcessImpl.Start (ProcessImpl.Java: 134)
в Java.ланг.Процесс -строитель.запустить (процесс -застройщик.Java: 1029)
... Еще 11

Rogerclark
Пт 19 июня 2015 г. 22:20
ммм

Я не видел эту ошибку раньше.

Можете ли вы попробовать установить разрешения на этот скрипт.

Я изменил сценарий клена-салона в течение недели, и мне интересно, были ли каким-то образом разрешения, которые загружены на GitHub.

Также убедитесь, что разрешения на бинарное изображение загрузки в порядке, так как это новый файл, который я добавил на этой неделе.

Rogerclark
Пт 19 июня 2015 г., 22:23
http: // www.Macinstruct.com/node/415

Энтони -декларк
Пт 19 июня 2015 г., 22:27
Я могу растянуть "дружбу" здесь... Но решил перейти в Maple, установите их IDE....

Пока я не могу выбрать последовательный порт, я загружаю мигание.... и он компилирует и загружает (см. Ниже).... Проблема здесь не является мигающим светодиодом... :) Но я могу добраться до этого позже!

Размер бинарного эскиза сообщается выше. Проверьте это на максимум 17000 байтов.
Загрузка через dfu-util
Сброс в загрузчик через DTR Pulse

Сброс через USB -сериал! Вы выбрали серийный правый последовательный порт?
Предполагая, что плата находится в режиме вечного загрузчика и продолжает пытаться программировать DFU...


Поиск устройства DFU [1EAF: 0003]...
Нашел это!

Открытие устройства USB 0x1eaf: 0x0003...
Найдено время выполнения: [0x1eaf: 0x0003] devnum = 0, cfg = 0, intf = 0, alt = 0, name = "DFU Program Ram 0x20000C00"
Заявление USB DFU интерфейс...
Настройка альтернативной настройки ...
Определение статуса устройства: состояние = dfuidle, status = 0
Dfuidle, продолжая
Размер передачи = 0x0400
bytes_per_hash = 256
Starting download: [############################################## ####] закончил!
Сброс ошибки после загрузки: usb_reset (resetdevice): неизвестная ошибка
состояние (8) = dfumanifest-wait-reset, status (0) = Условие ошибки не присутствует
Сделанный!
Сброс USB для переключения обратно в режим времени выполнения

Rogerclark
Пт 19 июня 2015 г., 22:37
Энтони

Нет никакого вреда в использовании Maple IDE, но вы пропустите много новых вещей.

Я знаю, что один или два человека обнаружили, что установка Maple IDE, волшебным образом исправив свои проблемы с Arduino IDE, но в вашем случае я не уверен, это так.

это просто звучит как проблема с разрешениями в одном из файлов.

Я проверю свой Mac, чтобы увидеть, нужно ли мне расширить разрешения в новом файле upload-reset

Энтони -декларк
Пт 19 июня 2015 г., 22:38
Как это?

nthonys-mbp-2: macosx anthonyjclarke $ ls -l
Всего 32
-rw-rw-rw-@ 1 anthonyjclarke сотрудники 827 14 июня 18:05 maple_upload
-rw-r-r-@ 1 anthonyjclarke Сотрудники 90 14 июня 18:05 serial_upload
drwxrwxrwx@ 8 anthonyjclarke сотрудники 272 20 июня 08:36 Stlink
-rw-r-r-@ 1 anthonyjclarke сотрудники 64 14 июня 18:05 stlink_upload
drwxrwxrwx@ 3 anthonyjclarke сотрудники 102 17 июня 09:12 STM32Flash
-rw-r-r-@ 1 anthonyjclarke сотрудники 420 14 июня 18:05 upload_router

Rogerclark
Пт 19 июня 2015 г. 22:48
ХОРОШО

Похоже, разрешения облажались

мои
-rwxr-xr-x 1 administrator staff 1377 16 Jun 21:23 maple_upload -rwxr-xr-x 1 administrator staff 90 8 Feb 18:01 serial_upload drwxr-xr-x 8 administrator staff 272 7 Apr 08:04 stlink -rwxr-xr-x 1 administrator staff 64 8 Feb 18:01 stlink_upload drwxr-xr-x 4 administrator staff 136 7 Apr 08:01 stm32flash -rwxr-xr-x 1 administrator staff 9424 16 Jun 21:17 upload-reset -rwxr-xr-x 1 administrator staff 420 8 Feb 18:01 upload_router

Энтони -декларк
Пт 19 июня 2015 г., 22:57
Woohoo! (Я думаю)....

Изменены разрешения на файлы....

Загрузил это:

void setup () {
// Инициализировать цифровой вывод 13 в качестве вывода.
pinmode (pb1, output);
}

// функция петли работает снова и снова навсегда
void loop () {
DigitalWrite (PB1, High); // включить светодиод (высокий уровень напряжения)
задержка (1000); // ждать секунды
DigitalWrite (PB1, Low); // выключить светодиод, сделав напряжение низким
задержка (1000); // ждать секунды
}

Но больше не было светодиодов... Может быть, у меня его нет на доске :)

Выход :


Sketch использует 12 564 байта (11%) пространства для хранения программы. Максимум составляет 110 592 байта.
Глобальные переменные используют 3104 байта динамической памяти.
DFU-UTIL 0.8

DFU-UTIL: недействительный суффикс DFU
Copyright 2005-2009 Weston Schmidt, Harald Welte и OpenMoko Inc.
Copyright 2010-2014 Тормод Волден и Стефан Шмидт
DFU-UTIL: действующий суффикс DFU потребуется в будущем выпуске DFU-UTIL!!!
Эта программа является бесплатным программным обеспечением и не имеет абсолютно никакой гарантии
Пожалуйста, сообщите об ошибках dfu-util@списки.гнумонки.орг

Выделение версии DFU DEVE
Открытие USB -устройства DFU...
ID 1EAF: 0003
Устройство времени выполнения DFU версия 0110
Заявление USB DFU интерфейс...
Настройка альтернативной настройки #1 ...
Определение статуса устройства: состояние = dfuidle, status = 0
Dfuidle, продолжая
DFU MODE DEVICE DFU Версия 0110
Устройство возвращалось размер передачи 1024
Копирование данных с ПК на устройство DFU

Скачать [] 0% 0 байтов
Скачать [=] 7% 1024 байт
Скачать [===] 15% 2048 байтов
Скачать [=====] 22% 3072 байта
Скачать [======] 30% 4096 байтов
Скачать [=========] 37% 5120 байтов
Скачать [===========] 45% 6144 байт
Скачать [================================================================================================================================================================================================================================== 52% 7168 байт
Скачать [============================] 60% 8192 байт
Скачать [================] 67% 9216 байтов
Скачать [=================] 75% 10240 байт
Скачать [==================== [82% 11264 байт
Скачать [======================] 90% 12288 байт
Скачать [======================== 67% 12564 байт
Скачать [======================== [100% 12564 байт
Скачать сделано.
состояние (8) = dfumanifest-wait-reset, status (0) = Условие ошибки не присутствует
Сделанный!
Сброс USB для переключения обратно в режим времени выполнения
DFU-UTIL: сброс ошибки после загрузки

Rogerclark
Пт 19 июня 2015 г., 23:02
Не беспокойтесь об ошибке, DFU UTIL, кажется, периодически делает это на всех системах

Это определенно похоже на загрузку.

Попробуйте использовать сериал и посмотреть, что что -то распечатает.

эн.глин.
#define LEDPIN PB1 void setup() { // put your setup code here, to run once: pinMode(LEDPIN,OUTPUT); Serial.begin(115200); // not really needed on Maple } int c; void loop() { // put your main code here, to run repeatedly: Serial.println(c++); digitalWrite(LEDPIN, !digitalRead(LEDPIN)); delay(500); }

Rogerclark
Пт 19 июня 2015 г. 11:05
Выбранный Maple Mini Rev 2, чтобы Flash

оригинальный загрузчик

Загружено на 2 разных Maple Minis

Оба работали нормально для меня.

Rogerclark
Пт 19 июня 2015 г. 11:08
Еще одна вещь, которую нужно попробовать, - это сбросить доску после загрузки

Я видел, как старый загрузчик иногда не сбрасывался после загрузки

Rogerclark
Пт 19 июня 2015 г., 23:09
КСТАТИ.

Когда вы получите шанс, вы можете сказать мне, как вы сделали оригинальную установку файлов E.глин. Загрузил молнию и рассеян или клонировал репо

Поскольку у меня не было никаких проблем с разрешениями на бинарные файлы раньше, но это может быть новая проблема с версией OSX

Энтони -декларк
Солнце 21 июня 2015 г. 8:40
Ммм.... @Роджер.... Это может быть странно объяснить....

В основном я думаю, что это сочетание вещей, и я подозреваю, что моя проблема не может быть репрезентативной...

1) У меня есть проблемы на IMAC с USB -драйверами / соединениями Arduino, один чипсет (и я не могу вспомнить, что) просто не работает... Итак, я направляюсь к своему MacBook Pro, над которым он работает.

2) У моей установки Arduino все мои файлы хранятся в документах (по умолчанию)... И у меня есть облачная синхронизация (www.Sugarsync.компонент) синхронизируется на всех моих устройствах....

Первоначально я мог бы скомпилировать на своем iMac, но не на MacBook, поэтому, я подозреваю, что облачная синхронизация могла быть проблемой... никогда не узнает..

3) Установила ли установку Maple IDE (как вы упомянули) исправить это!?

Извините, не уверен, помогает ли это... Но я хотел сказать большое спасибо... Ты и Рэй разобрались.... В дальнейшем и вверх....

О, у тебя есть "?" :)

Rogerclark
Солнце 21 июня 2015 10:52
Спасибо, Энтони

Похоже, что облачная синхронизация не сохраняет разрешения на файлы, но я думаю, что они только ожидают, что люди будут синхронизировать документы.

Тем не менее, я предполагаю, что он работает для вас как минимум на одной машине сейчас?

Энтони -декларк
Солнце 21 июня 2015 г., 11:09
Роджер, да, работая на ноутбуке... Была короткая «игра», чтобы работать над IMAC, но время закончилось... вернется к этому в другой раз...

Спасибо за вашу помощь!

Rogerclark
Солнце 21 июня 2015 г. 11:25
ХОРОШО.

Не беспокойся.

КСТАТИ. Если вы начнете чувствовать себя приключением, у Maple Mini будет лучший загрузчик, который загружает гораздо быстрее на OSX, но я некоторое время устроился на вещах, пока вы не почувствуете себя немного более комфортно со всей экосистемой, прежде чем пытаться перепрофир.

Кенджуцу
Пн 22 июня 2015 г., 9:44
Где инструкции по миганию нового загрузчика на клоне Maple Mini? ;)

Rogerclark
Пн 22 июня 2015 г., 9:54
Я думаю, что информация об обновлении Maple Mini Clone немного разбросана вокруг.

Я знаю, что Виктор сделал набросок обновлений, который вы можете запустить, который обновляет существующий загрузчик, но я не могу найти, где он сейчас

Я буду искать и опубликовать и обновить

@Kenjutsu

Извини. Я не могу найти эскиз для обновления загрузчика. Я не уверен, что Victor_pv удалил git Repo с ним в. Я уверен, что у него будет копия, которую он может репост.

Помимо использования эскиза Updater, вам нужно будет прошить, используя USB -серийный адаптер - если у вас есть один из них, вы можете использовать STM32Flash для загрузки нового двоичного файла.

https: // github.com/rogerclarkmelbourne/ ... Boot20.бин

Обратите внимание, что на Maple Mini есть недостаток дизайна, который предотвращает надежно входить в режим последовательного загрузчика, вам необходимо потянуть низкий уровень Boot1 и удерживать кнопку, нажав и выпустив кнопку сброса.

После того, как вы сделаете эту последовательность и прикрепите USB к последовательному адпатору к RX и TX (Serial 1), вы можете загрузить.

Однако гораздо легче дождаться, пока Виктор репост своего эскиза. Я напишу ему

Mrburnette
Пн 22 июня 2015 12:37
Обновлено: прикреплена моя архивная копия. Несколько устаревшего, но используется на Maple Mini.
Rogerclark написал:Я думаю, что информация об обновлении Maple Mini Clone немного разбросана вокруг.

Я знаю, что Виктор сделал набросок обновлений, который вы можете запустить, который обновляет существующий загрузчик, но я не могу найти, где он сейчас

Я буду искать и опубликовать и обновить

Кенджуцу
Пн 22 июня 2015 г., 18:21
Спасибо, Рэй! Вау, новый загрузчик быстрый! : шок: 8-)

Rogerclark
Пн 22 июня 2015 г., 21:26
Спасибо, Рэй.

Я писал Виктора, но он не вернулся ко мне. Я знаю, что это напряженное время года для всех.

Я добавлю эскиз для обновления в репотсайтер, так как он, безусловно, самый простой способ для пользователей Maple Mini обновить.
Пользователям общей платы уже нужно было изначально загрузить через USB в сериал, поэтому я не думаю, что это стоит меня создать версию для красной или синей таблетки и т. Д.
Однако я бы хотел, чтобы была документация о том, как работает Burn Bootloader в IDE, так как это было бы полезно для общих плат.

Я думаю, что ему нужен файл, называемый программистами.TXT, но Afik, они третья часть аппаратных документов не показывают, как написать этот файл

Rogerclark
Вт 23 июня 2015 г. 10:16
Рэй и Виктор

Я взял версию Рэя и объединил ее в один файл и включил данные загрузчика в эскиз, чтобы его самостоятельно содержал.

Я очистил сообщения, комментарии и т. Д

Я тестировал на оригинале Maple Mini, работающий с оригинальным загрузчиком Maple (загружен с сайта Leaflabs), а также с обновлением самостоятельно !
/** * * Maple Mini bootloader updater sketch. * Based on sketch from Gregwar for Robotis OpenCM9.04, which is based on Maple bootloader code. * * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING * WARNING WARNING * WARNING This comes with NO WARRANTY, you use it at your own risk WARNING * WARNING WARNING * WARNING Please read this warning text and the instructions below WARNING * WARNING WARNING * WARNING Running this sketch will erase your bootloader replace it WARNING * WARNING with the new STM32duino bootloader WARNING * WARNING WARNING * WARNING Only use this sketch with Maple mini boards. WARNING * WARNING WARNING * WARNING Note. If your bootloader does get messed up, it is possible WARNING * WARNING to reflash using an external USB to Serial adaptor or another WARNING * WARNING Arduino board (to act as a USB to Serial device) WARNING * WARNING WARNING * WARNING For more information see www.stm32duino.com WARNING * WARNING WARNING * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING * * * Instructions. * * Upload this sketch onto your Maple mini. * * After upload the LED on the board should start to flash slowly (on for 1 sec off for 1 sec) * * Open the Serial Monitor and follow the on screen instructions * * If the version of the bootloader that is contained in this sketch is already installed, * a message is displayed and you will not be prompted to update. * * If prompted to update, press Y to agree and reflash the bootloader * * After the update has finished, the sketch will wait for you to manually reset the board * or to upload a new sketch * * If you just reset the board. This sketch will run again, as it will not be touched by the bootloader update * However it will display the message to indicate that this bootloader has already been installed * * For support please register to www.stm32duino.com * * Credit goes to Victor PV, Matthis, Ray. * * For source code and binaries for the bootloader see * www.github.com/rogerclarkmelbourne/stm32duino-bootloader * * See also www.rogerclark.net * */ // Data of bootloader const char maple_mini_boot20[7100] = { 0x00, 0x50, 0x00, 0x20, 0x6D, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0x39, 0x05, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0xB5, 0x01, 0x00, 0x08, 0x5F, 0xF8, 0x08, 0xF1, 0x30, 0xBF, 0x70, 0x47, 0x20, 0xBF, 0x70, 0x47, 0x40, 0xBF, 0x70, 0x47, 0xBF, 0xF3, 0x6F, 0x8F, 0x70, 0x47, 0xBF, 0xF3, 0x4F, 0x8F, 0x70, 0x47, 0xBF, 0xF3, 0x5F, 0x8F, 0x70, 0x47, 0x01, 0xDF, 0x70, 0x47, 0xEF, 0xF3, 0x14, 0x80, 0x70, 0x47, 0x80, 0xF3, 0x14, 0x88, 0xBF, 0xF3, 0x6F, 0x8F, 0x70, 0x47, 0xEF, 0xF3, 0x09, 0x80, 0x70, 0x47, 0x80, 0xF3, 0x09, 0x88, 0x70, 0x47, 0xEF, 0xF3, 0x08, 0x80, 0x70, 0x47, 0x80, 0xF3, 0x08, 0x88, 0x70, 0x47, 0x62, 0xB6, 0x70, 0x47, 0x72, 0xB6, 0x70, 0x47, 0xEF, 0xF3, 0x10, 0x80, 0x70, 0x47, 0x61, 0xB6, 0x70, 0x47, 0x71, 0xB6, 0x70, 0x47, 0xEF, 0xF3, 0x13, 0x80, 0x70, 0x47, 0x80, 0xF3, 0x11, 0x88, 0x70, 0x47, 0xEF, 0xF3, 0x12, 0x80, 0x70, 0x47, 0x40, 0xBA, 0x70, 0x47, 0x00, 0xBA, 0x70, 0x47, 0x00, 0x00, 0x00, 0x21, 0x00, 0xF0, 0x04, 0xB8, 0x0B, 0x4B, 0x5B, 0x58, 0x43, 0x50, 0x04, 0x31, 0x0A, 0x48, 0x0A, 0x4B, 0x42, 0x18, 0x9A, 0x42, 0xFF, 0xF4, 0xF6, 0xAF, 0x09, 0x4A, 0x00, 0xF0, 0x03, 0xB8, 0x00, 0x23, 0x42, 0xF8, 0x04, 0x3B, 0x07, 0x4B, 0x9A, 0x42, 0xFF, 0xF4, 0xF9, 0xAF, 0x00, 0xF0, 0x27, 0xFA, 0x70, 0x47, 0xB4, 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x08, 0x03, 0x00, 0x20, 0x08, 0x03, 0x00, 0x20, 0x4C, 0x03, 0x00, 0x20, 0xFF, 0xF7, 0xFE, 0xBF, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x03, 0x28, 0x8C, 0xBF, 0x02, 0x20, 0x00, 0x20, 0x70, 0x47, 0x70, 0x47, 0x00, 0x00, 0x03, 0x4B, 0x1B, 0x68, 0x9B, 0x7A, 0x13, 0xB1, 0x02, 0x4B, 0x05, 0x22, 0x1A, 0x60, 0x70, 0x47, 0x44, 0x03, 0x00, 0x20, 0x50, 0x03, 0x00, 0x20, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x01, 0x4B, 0x04, 0x22, 0x1A, 0x60, 0x70, 0x47, 0x50, 0x03, 0x00, 0x20, 0x10, 0xB5, 0x00, 0xF0, 0x0F, 0xFC, 0x21, 0x4B, 0x21, 0x4A, 0x1B, 0x68, 0x00, 0x24, 0x12, 0x68, 0x9C, 0x72, 0xD2, 0x79, 0x20, 0x46, 0x5A, 0x72, 0x1E, 0x4A, 0x1F, 0x4B, 0x14, 0x60, 0x19, 0x68, 0x21, 0xF4, 0xEC, 0x41, 0x21, 0xF0, 0x70, 0x01, 0x41, 0xF4, 0x00, 0x71, 0x89, 0xB2, 0x19, 0x60, 0x19, 0x68, 0x21, 0xF4, 0xE0, 0x41, 0x21, 0xF0, 0x40, 0x01, 0x89, 0xB2, 0x81, 0xF0, 0x10, 0x01, 0x19, 0x60, 0x11, 0x68, 0x15, 0x4B, 0x89, 0xB2, 0x0B, 0x44, 0x5B, 0x00, 0x40, 0x21, 0x19, 0x60, 0x13, 0x68, 0x80, 0x22, 0x9B, 0xB2, 0x03, 0xF1, 0x00, 0x53, 0x03, 0xF5, 0x40, 0x53, 0x5B, 0x00, 0x1A, 0x60, 0x00, 0xF0, 0xBB, 0xFD, 0x0E, 0x4B, 0x20, 0x46, 0x1B, 0x68, 0x93, 0xF8, 0x30, 0x10, 0x00, 0xF0, 0x0C, 0xFE, 0x20, 0x46, 0x00, 0xF0, 0xA2, 0xFD, 0x0A, 0x4B, 0x01, 0x22, 0x20, 0x46, 0xBD, 0xE8, 0x10, 0x40, 0x1A, 0x60, 0x01, 0xF0, 0xA3, 0xBA, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0xF8, 0x02, 0x00, 0x20, 0x50, 0x5C, 0x00, 0x40, 0x00, 0x5C, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0x1C, 0x03, 0x00, 0x20, 0x50, 0x03, 0x00, 0x20, 0x38, 0xB5, 0x12, 0x4B, 0x05, 0x46, 0x1A, 0x68, 0x1C, 0x46, 0x12, 0x78, 0x02, 0xF0, 0x7F, 0x02, 0x21, 0x2A, 0x19, 0xD1, 0x00, 0xF0, 0x48, 0xFC, 0xB0, 0xB1, 0x68, 0x1E, 0x04, 0x28, 0x13, 0xD8, 0xDF, 0xE8, 0x00, 0xF0, 0x03, 0x05, 0x07, 0x12, 0x09, 0x00, 0x09, 0x4B, 0x04, 0xE0, 0x09, 0x4B, 0x02, 0xE0, 0x09, 0x4B, 0x00, 0xE0, 0x09, 0x4B, 0x22, 0x68, 0x00, 0x24, 0x20, 0x46, 0x93, 0x61, 0x54, 0x82, 0x98, 0x47, 0x20, 0x46, 0x38, 0xBD, 0x02, 0x20, 0x38, 0xBD, 0x44, 0x03, 0x00, 0x20, 0x95, 0x0A, 0x00, 0x08, 0xBD, 0x0A, 0x00, 0x08, 0x7D, 0x0A, 0x00, 0x08, 0x65, 0x0A, 0x00, 0x08, 0x01, 0x49, 0x01, 0xF0, 0x61, 0xB8, 0x00, 0xBF, 0x44, 0x01, 0x00, 0x20, 0x01, 0x49, 0x01, 0xF0, 0x5B, 0xB8, 0x00, 0xBF, 0xF8, 0x02, 0x00, 0x20, 0x05, 0x4B, 0x1B, 0x68, 0x9B, 0x78, 0x07, 0x2B, 0x04, 0xD8, 0x04, 0x49, 0x01, 0xEB, 0xC3, 0x01, 0x01, 0xF0, 0x4E, 0xB8, 0x00, 0x20, 0x70, 0x47, 0x44, 0x03, 0x00, 0x20, 0x94, 0x00, 0x00, 0x20, 0x01, 0x49, 0x01, 0xF0, 0x45, 0xB8, 0x00, 0xBF, 0xE0, 0x00, 0x00, 0x20, 0x08, 0xB5, 0x08, 0x4B, 0x1B, 0x68, 0x1B, 0x78, 0x03, 0xF0, 0x7F, 0x03, 0x21, 0x2B, 0x06, 0xD1, 0x00, 0xF0, 0xF8, 0xFB, 0x00, 0x28, 0x0C, 0xBF, 0x02, 0x20, 0x00, 0x20, 0x08, 0xBD, 0x02, 0x20, 0x08, 0xBD, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x38, 0xB5, 0x13, 0x4C, 0x09, 0x20, 0x25, 0x68, 0x00, 0xF0, 0x06, 0xFB, 0x28, 0x40, 0x40, 0xF0, 0x50, 0x05, 0x25, 0x60, 0x04, 0x3C, 0x20, 0x46, 0x09, 0x21, 0x01, 0x22, 0x00, 0xF0, 0x88, 0xF9, 0x20, 0x46, 0x00, 0x22, 0x09, 0x21, 0x00, 0xF0, 0x83, 0xF9, 0x00, 0xF0, 0x07, 0xFB, 0x09, 0x4B, 0xC2, 0xB2, 0x18, 0x60, 0x08, 0x4B, 0xC0, 0xF3, 0x07, 0x20, 0x83, 0xF8, 0x29, 0x20, 0x83, 0xF8, 0x2A, 0x00, 0x06, 0x4B, 0x5A, 0x71, 0x98, 0x71, 0xBD, 0xE8, 0x38, 0x40, 0x00, 0xF0, 0x2E, 0xBE, 0x04, 0x0C, 0x01, 0x40, 0x08, 0x03, 0x00, 0x20, 0xEC, 0x00, 0x00, 0x20, 0x29, 0x01, 0x00, 0x20, 0x04, 0x4B, 0x1A, 0x68, 0x92, 0xB2, 0x42, 0xF0, 0x0C, 0x02, 0x1A, 0x60, 0x02, 0x4B, 0x03, 0x22, 0x1A, 0x60, 0x70, 0x47, 0x40, 0x5C, 0x00, 0x40, 0x50, 0x03, 0x00, 0x20, 0x04, 0x4B, 0x4F, 0xF6, 0xFB, 0x72, 0x19, 0x68, 0x0A, 0x40, 0x1A, 0x60, 0x4F, 0xF4, 0x3F, 0x42, 0x1A, 0x60, 0x70, 0x47, 0x40, 0x5C, 0x00, 0x40, 0x10, 0xB5, 0x1E, 0x4C, 0x07, 0x28, 0x18, 0xBF, 0x20, 0x70, 0x23, 0x78, 0x05, 0x2B, 0x32, 0xD8, 0xDF, 0xE8, 0x03, 0xF0, 0x03, 0x06, 0x0A, 0x0E, 0x16, 0x21, 0xFF, 0xF7, 0xE5, 0xFF, 0x2A, 0xE0, 0xFF, 0xF7, 0xE2, 0xFF, 0x04, 0x23, 0x27, 0xE0, 0x02, 0x23, 0x63, 0x70, 0x03, 0x23, 0x23, 0xE0, 0x63, 0x78, 0x01, 0x3B, 0xDB, 0xB2, 0x63, 0x70, 0x63, 0x78, 0xF3, 0xB9, 0x04, 0x22, 0x17, 0xE0, 0x0F, 0x4B, 0x1A, 0x68, 0x92, 0xB2, 0x42, 0xF0, 0x10, 0x02, 0x1A, 0x60, 0x05, 0x23, 0x23, 0x70, 0x0A, 0x23, 0x63, 0x70, 0x10, 0xBD, 0x63, 0x78, 0x01, 0x3B, 0xDB, 0xB2, 0x63, 0x70, 0x63, 0x78, 0x5B, 0xB9, 0x07, 0x4A, 0x4F, 0xF6, 0xEF, 0x73, 0x11, 0x68, 0x0B, 0x40, 0x13, 0x60, 0x06, 0x22, 0x02, 0x4B, 0x1A, 0x70, 0x10, 0xBD, 0x06, 0x23, 0x23, 0x70, 0x10, 0xBD, 0x0E, 0x03, 0x00, 0x20, 0x40, 0x5C, 0x00, 0x40, 0x06, 0x4B, 0x01, 0x22, 0x1A, 0x60, 0x06, 0x4A, 0x00, 0x20, 0x06, 0x49, 0x18, 0x60, 0x10, 0x60, 0x4F, 0xF4, 0xE0, 0x52, 0x0A, 0x80, 0x1A, 0x60, 0x70, 0x47, 0x00, 0xBF, 0x40, 0x5C, 0x00, 0x40, 0x44, 0x5C, 0x00, 0x40, 0x48, 0x03, 0x00, 0x20, 0x07, 0xB5, 0x14, 0x23, 0x8D, 0xF8, 0x04, 0x30, 0x00, 0x23, 0x8D, 0xF8, 0x05, 0x30, 0x8D, 0xF8, 0x06, 0x30, 0x01, 0xA8, 0x01, 0x23, 0x8D, 0xF8, 0x07, 0x30, 0x00, 0xF0, 0xA5, 0xF9, 0x03, 0xB0, 0x5D, 0xF8, 0x04, 0xFB, 0x10, 0xB5, 0x00, 0xF0, 0x75, 0xFA, 0x09, 0x4B, 0x00, 0x24, 0x1B, 0x68, 0x9C, 0x72, 0xFF, 0xF7, 0xD1, 0xFF, 0x07, 0x4B, 0x07, 0x4A, 0x1C, 0x60, 0x4F, 0xF4, 0x3F, 0x43, 0x13, 0x80, 0x06, 0x4A, 0x13, 0x60, 0xFF, 0xF7, 0xDB, 0xFF, 0x05, 0x4B, 0x1C, 0x60, 0x10, 0xBD, 0x44, 0x03, 0x00, 0x20, 0x44, 0x5C, 0x00, 0x40, 0x48, 0x03, 0x00, 0x20, 0x40, 0x5C, 0x00, 0x40, 0x50, 0x03, 0x00, 0x20, 0x07, 0xB5, 0x14, 0x23, 0x8D, 0xF8, 0x04, 0x30, 0x01, 0xA8, 0x00, 0x23, 0x8D, 0xF8, 0x05, 0x30, 0x8D, 0xF8, 0x06, 0x30, 0x8D, 0xF8, 0x07, 0x30, 0x00, 0xF0, 0x74, 0xF9, 0x03, 0xB0, 0x5D, 0xF8, 0x04, 0xFB, 0x00, 0x00, 0x70, 0xB5, 0x27, 0x4D, 0x27, 0x4C, 0x2B, 0x68, 0x27, 0x4E, 0x9B, 0xB2, 0x23, 0x80, 0x22, 0x88, 0x33, 0x88, 0x13, 0x40, 0x59, 0x05, 0x05, 0xD5, 0x4F, 0xF6, 0xFF, 0x33, 0x2B, 0x60, 0x23, 0x4B, 0x5B, 0x68, 0x98, 0x47, 0x22, 0x88, 0x33, 0x88, 0x1A, 0x40, 0x92, 0x04, 0x44, 0xBF, 0x4D, 0xF6, 0xFF, 0x72, 0x2A, 0x60, 0x22, 0x88, 0x13, 0x40, 0xDB, 0x04, 0x05, 0xD5, 0x4E, 0xF6, 0xFF, 0x73, 0x2B, 0x60, 0x00, 0x20, 0xFF, 0xF7, 0x42, 0xFF, 0x22, 0x88, 0x33, 0x88, 0x13, 0x40, 0x18, 0x05, 0x04, 0xD5, 0xFF, 0xF7, 0x21, 0xFF, 0x4F, 0xF2, 0xFF, 0x73, 0x2B, 0x60, 0x22, 0x88, 0x33, 0x88, 0x1A, 0x40, 0x91, 0x05, 0x07, 0xD5, 0x4F, 0xF6, 0xFF, 0x52, 0x2A, 0x60, 0x10, 0x4A, 0x11, 0x78, 0x01, 0x31, 0xC9, 0xB2, 0x11, 0x70, 0x22, 0x88, 0x13, 0x40, 0xDA, 0x05, 0x05, 0xD5, 0x4F, 0xF6, 0xFF, 0x63, 0x2B, 0x60, 0x07, 0x20, 0xFF, 0xF7, 0x21, 0xFF, 0x22, 0x88, 0x33, 0x88, 0x13, 0x40, 0x1B, 0x04, 0x03, 0xD5, 0xBD, 0xE8, 0x70, 0x40, 0x00, 0xF0, 0x7A, 0xBC, 0x70, 0xBD, 0x00, 0xBF, 0x44, 0x5C, 0x00, 0x40, 0x0C, 0x03, 0x00, 0x20, 0x48, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x4C, 0x03, 0x00, 0x20, 0x37, 0xB5, 0x01, 0x24, 0x00, 0xF0, 0x92, 0xF8, 0x00, 0xF0, 0xB4, 0xF8, 0x00, 0xF0, 0xE2, 0xF8, 0xFF, 0xF7, 0xB8, 0xFE, 0x00, 0xF0, 0xF2, 0xF8, 0x23, 0x48, 0x00, 0x94, 0x21, 0x46, 0x05, 0x22, 0x4F, 0xF4, 0xA0, 0x23, 0x00, 0xF0, 0x5A, 0xF8, 0x20, 0x48, 0x00, 0xF0, 0xF5, 0xF8, 0x28, 0xB1, 0x00, 0xF0, 0x4C, 0xF8, 0x00, 0x30, 0x18, 0xBF, 0x01, 0x20, 0x05, 0xE0, 0x1C, 0x48, 0x00, 0xF0, 0xEB, 0xF8, 0x00, 0x28, 0xF4, 0xD1, 0x20, 0x46, 0xC4, 0xB2, 0x00, 0x25, 0x05, 0x2D, 0x0E, 0xDC, 0x01, 0x21, 0x00, 0x91, 0x14, 0x48, 0x0A, 0x46, 0x4F, 0xF4, 0x80, 0x13, 0x00, 0xF0, 0x3E, 0xF8, 0x00, 0xF0, 0x98, 0xFB, 0x08, 0xB1, 0x00, 0xF0, 0x9B, 0xFB, 0x01, 0x35, 0xEE, 0xE7, 0x00, 0x2C, 0xEE, 0xD1, 0x0F, 0x48, 0x00, 0xF0, 0xD0, 0xF8, 0x08, 0xB1, 0x0D, 0x48, 0x04, 0xE0, 0x0B, 0x48, 0x00, 0xF0, 0xCA, 0xF8, 0x18, 0xB1, 0x09, 0x48, 0x00, 0xF0, 0x18, 0xF9, 0x09, 0xE0, 0x01, 0x21, 0x00, 0x91, 0x05, 0x48, 0x05, 0x22, 0x4F, 0xF4, 0xA0, 0x23, 0x00, 0xF0, 0x1F, 0xF8, 0x00, 0xF0, 0x21, 0xF9, 0x00, 0x20, 0x03, 0xB0, 0x30, 0xBD, 0x00, 0x0C, 0x01, 0x40, 0x00, 0x50, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x01, 0x23, 0x03, 0xFA, 0x01, 0xF1, 0xD2, 0xF1, 0x01, 0x02, 0x38, 0xBF, 0x00, 0x22, 0x13, 0x01, 0x99, 0x40, 0x01, 0x61, 0x70, 0x47, 0x00, 0x00, 0x02, 0x4B, 0x18, 0x68, 0xC0, 0xF3, 0x00, 0x20, 0x70, 0x47, 0x00, 0xBF, 0x08, 0x0C, 0x01, 0x40, 0x2D, 0xE9, 0xF0, 0x47, 0x9D, 0xF8, 0x20, 0xA0, 0x14, 0x46, 0xCA, 0xF1, 0x01, 0x07, 0xFF, 0xB2, 0x3A, 0x46, 0x80, 0x46, 0x89, 0x46, 0x1E, 0x46, 0xFF, 0xF7, 0xDE, 0xFF, 0xB4, 0xB1, 0x35, 0x46, 0x15, 0xB1, 0x00, 0xBF, 0x01, 0x3D, 0xFB, 0xE7, 0x40, 0x46, 0x49, 0x46, 0x52, 0x46, 0xFF, 0xF7, 0xD3, 0xFF, 0x35, 0x46, 0x15, 0xB1, 0x00, 0xBF, 0x01, 0x3D, 0xFB, 0xE7, 0x40, 0x46, 0x49, 0x46, 0x3A, 0x46, 0x01, 0x3C, 0xFF, 0xF7, 0xC8, 0xFF, 0xE4, 0xB2, 0xE7, 0xE7, 0xBD, 0xE8, 0xF0, 0x87, 0x0D, 0x4B, 0x0E, 0x49, 0x1A, 0x68, 0x42, 0xF0, 0x01, 0x02, 0x1A, 0x60, 0x0C, 0x4A, 0x10, 0x68, 0x01, 0x40, 0x11, 0x60, 0x19, 0x68, 0x21, 0xF0, 0x84, 0x71, 0x21, 0xF4, 0x80, 0x31, 0x19, 0x60, 0x19, 0x68, 0x21, 0xF4, 0x80, 0x21, 0x19, 0x60, 0x13, 0x68, 0x23, 0xF4, 0xFE, 0x03, 0x13, 0x60, 0x04, 0x4B, 0x00, 0x22, 0x1A, 0x60, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xF8, 0x04, 0x10, 0x02, 0x40, 0x08, 0x10, 0x02, 0x40, 0x15, 0x4B, 0x1A, 0x68, 0x42, 0xF0, 0x01, 0x12, 0x1A, 0x60, 0x1A, 0x68, 0x12, 0x48, 0x92, 0x03, 0xFB, 0xD5, 0x12, 0x4A, 0x12, 0x21, 0x11, 0x60, 0xA2, 0xF6, 0xFC, 0x72, 0x11, 0x68, 0x41, 0xF4, 0xE8, 0x11, 0x41, 0xF4, 0x80, 0x61, 0x11, 0x60, 0x01, 0x68, 0x41, 0xF0, 0x80, 0x71, 0x01, 0x60, 0x19, 0x68, 0x11, 0xF0, 0x40, 0x7F, 0xFB, 0xD0, 0x11, 0x68, 0x41, 0xF0, 0x02, 0x01, 0x11, 0x60, 0x11, 0x68, 0x09, 0x07, 0xFC, 0xD5, 0x9A, 0x69, 0x42, 0xF4, 0xFE, 0x72, 0x9A, 0x61, 0xDA, 0x69, 0x42, 0xF4, 0x00, 0x02, 0xDA, 0x61, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x00, 0x20, 0x02, 0x40, 0x07, 0x4B, 0x08, 0x4A, 0x1A, 0x60, 0x4F, 0xF0, 0x80, 0x72, 0xDA, 0x60, 0x53, 0xF8, 0x04, 0x2C, 0x22, 0xF0, 0xF0, 0x02, 0x42, 0xF0, 0x10, 0x02, 0x43, 0xF8, 0x04, 0x2C, 0x70, 0x47, 0x00, 0xBF, 0x04, 0x0C, 0x01, 0x40, 0x08, 0x0C, 0x01, 0x40, 0x05, 0x4B, 0x1A, 0x68, 0xD1, 0x07, 0x03, 0xD4, 0x1A, 0x68, 0x42, 0xF0, 0x01, 0x02, 0x1A, 0x60, 0x1A, 0x68, 0x92, 0x07, 0xFC, 0xD5, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x03, 0x68, 0x03, 0x48, 0x18, 0x40, 0xB0, 0xF1, 0x00, 0x53, 0x58, 0x42, 0x58, 0x41, 0x70, 0x47, 0x00, 0x00, 0xFE, 0x2F, 0x18, 0x4B, 0x30, 0xB5, 0xDB, 0x68, 0x44, 0x78, 0xDB, 0x43, 0xC3, 0xF3, 0x02, 0x23, 0xC3, 0xF1, 0x04, 0x02, 0x04, 0xFA, 0x02, 0xF2, 0x0F, 0x24, 0xDC, 0x40, 0x81, 0x78, 0x03, 0x78, 0x0C, 0x40, 0x14, 0x43, 0x03, 0xF0, 0x03, 0x01, 0xC9, 0x00, 0x24, 0x01, 0xFF, 0x22, 0x8C, 0x40, 0x8A, 0x40, 0x03, 0xF0, 0xFC, 0x03, 0x03, 0xF1, 0x60, 0x43, 0x03, 0xF5, 0x61, 0x43, 0xD3, 0xF8, 0x00, 0x53, 0x25, 0xEA, 0x02, 0x01, 0x22, 0x40, 0x0A, 0x43, 0xC3, 0xF8, 0x00, 0x23, 0x03, 0x78, 0x01, 0x22, 0x59, 0x09, 0x03, 0xF0, 0x1F, 0x03, 0x02, 0xFA, 0x03, 0xF3, 0x03, 0x4A, 0x42, 0xF8, 0x21, 0x30, 0x30, 0xBD, 0x00, 0xBF, 0x00, 0xED, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE0, 0x07, 0x4B, 0x4F, 0xF0, 0xFF, 0x32, 0xC3, 0xF8, 0x80, 0x20, 0xC3, 0xF8, 0x84, 0x20, 0xC3, 0xF8, 0x80, 0x21, 0xC3, 0xF8, 0x84, 0x21, 0x04, 0x22, 0x43, 0xF8, 0xF0, 0x2C, 0x70, 0x47, 0x00, 0xBF, 0x00, 0xE1, 0x00, 0xE0, 0x38, 0xB5, 0x08, 0x4B, 0x80, 0x22, 0x45, 0x68, 0x04, 0x46, 0x1A, 0x60, 0xFF, 0xF7, 0x2E, 0xFE, 0xFF, 0xF7, 0xE4, 0xFF, 0xFF, 0xF7, 0x2C, 0xFF, 0x20, 0x68, 0xFF, 0xF7, 0x37, 0xFC, 0xA8, 0x47, 0x38, 0xBD, 0x00, 0xBF, 0x10, 0x20, 0x02, 0x40, 0x02, 0x4A, 0x03, 0x4B, 0xDA, 0x60, 0x00, 0xBF, 0xFD, 0xE7, 0x00, 0xBF, 0x04, 0x00, 0xFA, 0x05, 0x00, 0xED, 0x00, 0xE0, 0x0A, 0x4B, 0x10, 0xB5, 0x1A, 0x68, 0x02, 0x22, 0x1A, 0x60, 0x09, 0x4A, 0x11, 0x68, 0x14, 0x46, 0x11, 0xF0, 0x01, 0x0F, 0xF9, 0xD1, 0x90, 0x60, 0x42, 0x22, 0x1A, 0x60, 0x22, 0x68, 0x12, 0xF0, 0x01, 0x01, 0xFB, 0xD1, 0x19, 0x60, 0x01, 0x20, 0x10, 0xBD, 0x00, 0xBF, 0x10, 0x20, 0x02, 0x40, 0x0C, 0x20, 0x02, 0x40, 0x37, 0xB5, 0x8B, 0xB2, 0x00, 0x93, 0x0B, 0x0C, 0x01, 0x93, 0x0E, 0x4B, 0x01, 0x22, 0x1C, 0x68, 0x1A, 0x60, 0x0D, 0x4A, 0x15, 0x68, 0xED, 0x07, 0xFB, 0xD4, 0x01, 0x9D, 0xAD, 0xB2, 0x45, 0x80, 0x15, 0x68, 0xED, 0x07, 0xFC, 0xD4, 0x00, 0x9D, 0xAD, 0xB2, 0x05, 0x80, 0x15, 0x68, 0xED, 0x07, 0xFC, 0xD4, 0x24, 0xF0, 0x01, 0x02, 0x1A, 0x60, 0x00, 0x68, 0x43, 0x1A, 0x58, 0x42, 0x58, 0x41, 0x03, 0xB0, 0x30, 0xBD, 0x10, 0x20, 0x02, 0x40, 0x0C, 0x20, 0x02, 0x40, 0x01, 0x4B, 0x80, 0x22, 0x1A, 0x60, 0x70, 0x47, 0x10, 0x20, 0x02, 0x40, 0x03, 0x4B, 0x04, 0x4A, 0x1A, 0x60, 0x02, 0xF1, 0x88, 0x32, 0x1A, 0x60, 0x70, 0x47, 0x00, 0xBF, 0x04, 0x20, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, 0x07, 0x28, 0xC8, 0xBF, 0x08, 0x38, 0x0F, 0x23, 0x80, 0x00, 0x03, 0xFA, 0x00, 0xF0, 0xC0, 0x43, 0x70, 0x47, 0x00, 0x00, 0x02, 0x4B, 0x18, 0x88, 0x00, 0xF5, 0x00, 0x30, 0x80, 0x02, 0x70, 0x47, 0xE0, 0xF7, 0xFF, 0x1F, 0x04, 0x4B, 0x1B, 0x88, 0x81, 0x2B, 0x34, 0xBF, 0x4F, 0xF4, 0x80, 0x60, 0x4F, 0xF4, 0x00, 0x60, 0x70, 0x47, 0x00, 0xBF, 0xE0, 0xF7, 0xFF, 0x1F, 0x0D, 0x4A, 0x00, 0x23, 0x02, 0x21, 0x13, 0x70, 0x53, 0x70, 0x93, 0x70, 0xD3, 0x70, 0x11, 0x71, 0x53, 0x71, 0x0A, 0x4A, 0x0A, 0x49, 0x13, 0x60, 0x0A, 0x4A, 0x13, 0x80, 0x0A, 0x4A, 0x11, 0x60, 0x0A, 0x4A, 0x01, 0xF5, 0x88, 0x41, 0x11, 0x60, 0x09, 0x4A, 0x03, 0x21, 0x13, 0x70, 0x09, 0x4A, 0x11, 0x70, 0x09, 0x4A, 0x13, 0x70, 0x70, 0x47, 0x5D, 0x0B, 0x00, 0x20, 0x58, 0x0B, 0x00, 0x20, 0x00, 0x0C, 0x00, 0x20, 0x56, 0x0B, 0x00, 0x20, 0x04, 0x03, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x5C, 0x0B, 0x00, 0x20, 0x10, 0x03, 0x00, 0x20, 0x63, 0x0B, 0x00, 0x20, 0x08, 0xB5, 0x0E, 0x4B, 0x0E, 0x48, 0x19, 0x79, 0x00, 0x22, 0xC9, 0xB2, 0x01, 0x29, 0x02, 0x60, 0x08, 0xD1, 0x02, 0x21, 0x19, 0x71, 0x1A, 0x70, 0xFF, 0xF7, 0x24, 0xFF, 0xBD, 0xE8, 0x08, 0x40, 0xFF, 0xF7, 0x36, 0xBD, 0x11, 0xF0, 0xFD, 0x0F, 0x06, 0xD0, 0x02, 0x21, 0x19, 0x71, 0x1A, 0x70, 0xBD, 0xE8, 0x08, 0x40, 0xFF, 0xF7, 0x3C, 0xBF, 0x08, 0xBD, 0x00, 0xBF, 0x5D, 0x0B, 0x00, 0x20, 0x58, 0x0B, 0x00, 0x20, 0x20, 0xB9, 0x03, 0x4B, 0x01, 0x22, 0x1B, 0x68, 0x1A, 0x82, 0x70, 0x47, 0x01, 0x48, 0x70, 0x47, 0x44, 0x03, 0x00, 0x20, 0x61, 0x0B, 0x00, 0x20, 0x20, 0xB9, 0x03, 0x4B, 0x06, 0x22, 0x1B, 0x68, 0x1A, 0x82, 0x70, 0x47, 0x01, 0x48, 0x70, 0x47, 0x44, 0x03, 0x00, 0x20, 0x5D, 0x0B, 0x00, 0x20, 0x06, 0x4B, 0x1B, 0x68, 0x30, 0xB9, 0xDA, 0x88, 0x59, 0x8A, 0x51, 0x1A, 0x19, 0x82, 0x04, 0x4B, 0x1A, 0x80, 0x70, 0x47, 0x5B, 0x8A, 0x03, 0x48, 0x18, 0x44, 0x70, 0x47, 0x44, 0x03, 0x00, 0x20, 0x56, 0x0B, 0x00, 0x20, 0x54, 0x03, 0x00, 0x20, 0x08, 0x4B, 0x30, 0xB9, 0x1B, 0x68, 0x08, 0x4A, 0x11, 0x88, 0x5A, 0x8A, 0x8A, 0x1A, 0x1A, 0x82, 0x70, 0x47, 0x06, 0x49, 0x06, 0x4A, 0x1B, 0x68, 0x12, 0x68, 0x08, 0x68, 0x5B, 0x8A, 0x10, 0x44, 0x18, 0x44, 0x70, 0x47, 0x44, 0x03, 0x00, 0x20, 0x56, 0x0B, 0x00, 0x20, 0x04, 0x03, 0x00, 0x20, 0x58, 0x0B, 0x00, 0x20, 0x70, 0xB5, 0x12, 0x4B, 0x12, 0x4E, 0x1B, 0x78, 0x34, 0x68, 0x02, 0x2B, 0x04, 0xF1, 0x00, 0x64, 0x0C, 0xBF, 0x04, 0xF5, 0xA0, 0x44, 0x04, 0xF5, 0x00, 0x54, 0x20, 0x46, 0xFF, 0xF7, 0xEA, 0xFE, 0x00, 0x25, 0x0C, 0x4B, 0x1A, 0x88, 0x92, 0xB2, 0x95, 0x42, 0x06, 0xDA, 0x0A, 0x4B, 0x60, 0x19, 0xE9, 0x58, 0xFF, 0xF7, 0xF9, 0xFE, 0x04, 0x35, 0xF3, 0xE7, 0x31, 0x68, 0x1A, 0x88, 0x92, 0xB2, 0x0A, 0x44, 0x32, 0x60, 0x00, 0x22, 0x1A, 0x80, 0x70, 0xBD, 0x00, 0xBF, 0x5C, 0x0B, 0x00, 0x20, 0x58, 0x0B, 0x00, 0x20, 0x56, 0x0B, 0x00, 0x20, 0x54, 0x03, 0x00, 0x20, 0x2D, 0xE9, 0xF0, 0x41, 0x7F, 0x49, 0x80, 0x4C, 0x01, 0x20, 0x08, 0x70, 0x23, 0x79, 0x00, 0x22, 0xDB, 0xB2, 0x02, 0x2B, 0x22, 0x70, 0x56, 0xD1, 0x08, 0x70, 0x7C, 0x49, 0x09, 0x68, 0x48, 0x78, 0x01, 0x28, 0x26, 0xD1, 0xC8, 0x88, 0x00, 0x28, 0x00, 0xF0, 0xC1, 0x80, 0x78, 0x48, 0x09, 0x7B, 0x02, 0x60, 0x01, 0x29, 0x4F, 0xF0, 0x03, 0x02, 0x22, 0x71, 0x0B, 0xD0, 0x02, 0x29, 0x16, 0xD1, 0x74, 0x4B, 0x1A, 0x70, 0x74, 0x4A, 0x75, 0x4B, 0x1A, 0x60, 0xFF, 0xF7, 0x27, 0xFE, 0xFF, 0xF7, 0xE9, 0xFE, 0xCF, 0xE0, 0x72, 0x49, 0x71, 0x4A, 0x11, 0x60, 0x6E, 0x4A, 0x13, 0x70, 0xFF, 0xF7, 0x1D, 0xFE, 0xFF, 0xF7, 0xDF, 0xFE, 0x6C, 0x48, 0xFF, 0xF7, 0x96, 0xFE, 0xC2, 0xE0, 0x0A, 0x23, 0x62, 0xE0, 0x02, 0x28, 0x21, 0xD1, 0x09, 0x23, 0x23, 0x71, 0xCA, 0x88, 0x69, 0x4B, 0x1A, 0x80, 0x18, 0x88, 0x69, 0x4A, 0x80, 0xB2, 0x10, 0x80, 0x1A, 0x88, 0x4B, 0x88, 0x92, 0xB2, 0x5A, 0x43, 0x5F, 0x4B, 0x1A, 0x60, 0x0B, 0x7B, 0x01, 0x2B, 0x03, 0xD0, 0x02, 0x2B, 0x09, 0xD1, 0x5E, 0x4A, 0x00, 0xE0, 0x5F, 0x4A, 0x5D, 0x4B, 0x1A, 0x60, 0xFF, 0xF7, 0xD2, 0xFE, 0x5F, 0x4B, 0x18, 0x60, 0xA0, 0xE0, 0x0A, 0x23, 0x23, 0x71, 0x03, 0x23, 0x9B, 0xE0, 0x06, 0x28, 0x3C, 0xD0, 0x03, 0x28, 0x19, 0xD0, 0x05, 0x28, 0x3C, 0xE0, 0x03, 0x2B, 0x0B, 0xD1, 0x50, 0x4A, 0x12, 0x68, 0x52, 0x78, 0x03, 0x2A, 0x04, 0xD1, 0x05, 0x23, 0x23, 0x71, 0xFF, 0xF7, 0x64, 0xFF, 0x8A, 0xE0, 0x05, 0x2A, 0x2E, 0xE0, 0x04, 0x2B, 0x09, 0xD1, 0x52, 0x49, 0x08, 0x78, 0x02, 0x28, 0x03, 0xD1, 0x03, 0x23, 0x62, 0x70, 0x0B, 0x70, 0x05, 0x23, 0x23, 0x71, 0x7C, 0xE0, 0x05, 0x2B, 0x14, 0xD1, 0x43, 0x4B, 0x1A, 0x68, 0x53, 0x78, 0x01, 0x2B, 0x08, 0xD1, 0xD3, 0x88, 0x0B, 0xB1, 0x03, 0x23, 0xF2, 0xE7, 0x06, 0x23, 0x23, 0x71, 0xFF, 0xF7, 0x80, 0xFE, 0x6C, 0xE0, 0x06, 0x2B, 0x4D, 0xD0, 0x03, 0x2B, 0x4B, 0xD0, 0x05, 0x2B, 0x62, 0xD1, 0x48, 0xE0, 0x06, 0x2B, 0x0B, 0xD1, 0x37, 0x49, 0x09, 0x68, 0x49, 0x78, 0x03, 0x29, 0x03, 0xD1, 0x08, 0x23, 0x23, 0x71, 0x22, 0x70, 0x5A, 0xE0, 0x05, 0x29, 0x54, 0xD1, 0xD8, 0xE7, 0x07, 0x2B, 0xF6, 0xD0, 0x08, 0x2B, 0xD4, 0xD0, 0x09, 0x2B, 0x3C, 0xD1, 0x2E, 0x4B, 0x1A, 0x68, 0x53, 0x78, 0x02, 0x2B, 0x2D, 0xD1, 0xD0, 0x88, 0x38, 0xB3, 0x31, 0x49, 0x52, 0x88, 0x0B, 0x88, 0x2D, 0x4D, 0x9B, 0xB2, 0x53, 0x43, 0x29, 0x4A, 0x2F, 0x4E, 0x13, 0x60, 0x2F, 0x68, 0xD2, 0xF8, 0x00, 0x80, 0xB1, 0xF8, 0x00, 0xC0, 0x47, 0x44, 0x33, 0x68, 0x1F, 0xFA, 0x8C, 0xFC, 0x67, 0x44, 0x9F, 0x42, 0x28, 0x4B, 0x03, 0xD8, 0x0A, 0x88, 0x92, 0xB2, 0x1A, 0x80, 0x19, 0xE0, 0x36, 0x68, 0x2D, 0x68, 0x11, 0x68, 0x72, 0x1B, 0x52, 0x1A, 0x92, 0xB2, 0x1A, 0x80, 0x1A, 0x88, 0x92, 0xB2, 0x82, 0x42, 0x08, 0xD3, 0x00, 0x22, 0x1A, 0x80, 0x05, 0xE0, 0x0A, 0x23, 0x23, 0x71, 0x09, 0x23, 0x1D, 0xE0, 0x06, 0x2B, 0x01, 0xD1, 0x02, 0x23, 0x9B, 0xE7, 0x03, 0x2B, 0x01, 0xD0, 0x05, 0x2B, 0x12, 0xD1, 0x09, 0x23, 0x95, 0xE7, 0x0A, 0x2B, 0x0E, 0xD1, 0x0F, 0x4B, 0x1B, 0x68, 0x5B, 0x78, 0x03, 0x2B, 0x01, 0xD1, 0x0A, 0x23, 0x8C, 0xE7, 0x05, 0x2B, 0xFB, 0xD0, 0x04, 0x2B, 0x03, 0xD1, 0x02, 0x23, 0x23, 0x71, 0x00, 0x23, 0x02, 0xE0, 0x0A, 0x23, 0x23, 0x71, 0x0F, 0x23, 0x23, 0x70, 0x20, 0x78, 0xD0, 0xF1, 0x01, 0x00, 0x38, 0xBF, 0x00, 0x20, 0xBD, 0xE8, 0xF0, 0x81, 0x00, 0xBF, 0x63, 0x0B, 0x00, 0x20, 0x5D, 0x0B, 0x00, 0x20, 0x44, 0x03, 0x00, 0x20, 0x58, 0x0B, 0x00, 0x20, 0x5C, 0x0B, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x04, 0x03, 0x00, 0x20, 0x00, 0x50, 0x00, 0x08, 0x54, 0x0B, 0x00, 0x20, 0x56, 0x0B, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x10, 0x03, 0x00, 0x20, 0x01, 0x4B, 0x18, 0x78, 0x70, 0x47, 0x00, 0xBF, 0x63, 0x0B, 0x00, 0x20, 0x00, 0xBF, 0xFD, 0xE7, 0x80, 0x00, 0x00, 0xF1, 0x80, 0x40, 0x00, 0xF5, 0xB8, 0x40, 0x03, 0x68, 0xCA, 0x06, 0x23, 0xF4, 0xE0, 0x43, 0x23, 0xF0, 0x40, 0x03, 0x9B, 0xB2, 0x48, 0xBF, 0x83, 0xF0, 0x10, 0x03, 0x8A, 0x06, 0x48, 0xBF, 0x83, 0xF0, 0x20, 0x03, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xF1, 0x80, 0x40, 0x00, 0xF5, 0xB8, 0x40, 0x03, 0x68, 0x23, 0xF4, 0x80, 0x43, 0x23, 0xF0, 0x70, 0x03, 0x9B, 0xB2, 0x83, 0xF4, 0x40, 0x53, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xF1, 0x80, 0x40, 0x00, 0xF5, 0xB8, 0x40, 0x03, 0x68, 0x23, 0xF4, 0xE2, 0x43, 0x23, 0xF0, 0x70, 0x03, 0x1B, 0x04, 0x1B, 0x0C, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xF1, 0x80, 0x40, 0x00, 0xF5, 0xB8, 0x40, 0x03, 0x68, 0x5B, 0x04, 0x06, 0xD5, 0x02, 0x68, 0x48, 0xF6, 0x8F, 0x73, 0x13, 0x40, 0x43, 0xF4, 0x80, 0x43, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xF1, 0x80, 0x40, 0x00, 0xF5, 0xB8, 0x40, 0x03, 0x68, 0x5B, 0x06, 0x06, 0xD5, 0x02, 0x68, 0x48, 0xF6, 0x8F, 0x73, 0x13, 0x40, 0x43, 0xF0, 0x40, 0x03, 0x03, 0x60, 0x70, 0x47, 0x05, 0x4B, 0x1B, 0x68, 0x9B, 0xB2, 0x03, 0xEB, 0xC0, 0x00, 0x00, 0xF1, 0x00, 0x50, 0x00, 0xF5, 0x40, 0x50, 0x40, 0x00, 0x00, 0x88, 0x70, 0x47, 0x50, 0x5C, 0x00, 0x40, 0x04, 0x4B, 0x1B, 0x68, 0x9B, 0xB2, 0x03, 0xEB, 0xC0, 0x00, 0x03, 0x4B, 0x03, 0x44, 0x5B, 0x00, 0x18, 0x88, 0x70, 0x47, 0x50, 0x5C, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0x04, 0x4B, 0x1B, 0x68, 0x9B, 0xB2, 0x03, 0xEB, 0xC0, 0x00, 0x03, 0x4B, 0x03, 0x44, 0x5B, 0x00, 0x19, 0x60, 0x70, 0x47, 0x50, 0x5C, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0x0D, 0x4B, 0x3E, 0x29, 0x1B, 0x68, 0x9B, 0xB2, 0x03, 0xEB, 0xC0, 0x00, 0x0B, 0x4B, 0x03, 0x44, 0x4F, 0xEA, 0x43, 0x02, 0x09, 0xD9, 0x4B, 0x09, 0xC8, 0x06, 0x04, 0xBF, 0x03, 0xF1, 0xFF, 0x33, 0x9B, 0xB2, 0x9B, 0x02, 0x43, 0xF4, 0x00, 0x43, 0x04, 0xE0, 0x4B, 0x08, 0xC9, 0x07, 0x48, 0xBF, 0x01, 0x33, 0x9B, 0x02, 0x13, 0x60, 0x70, 0x47, 0x50, 0x5C, 0x00, 0x40, 0x06, 0x30, 0x00, 0x20, 0x70, 0xB5, 0x4C, 0x4A, 0x4C, 0x4B, 0x11, 0x68, 0x88, 0xB2, 0x0C, 0x04, 0x18, 0x80, 0x40, 0xF1, 0x90, 0x80, 0x47, 0xF6, 0xFF, 0x71, 0x11, 0x60, 0x1A, 0x88, 0x48, 0x4C, 0x02, 0xF0, 0x0F, 0x02, 0x22, 0x70, 0x00, 0x2A, 0x5F, 0xD1, 0x46, 0x4C, 0x46, 0x4D, 0x22, 0x68, 0x46, 0x4E, 0x02, 0xF4, 0x40, 0x52, 0x2A, 0x80, 0x22, 0x68, 0x02, 0xF0, 0x30, 0x02, 0x32, 0x80, 0x22, 0x68, 0x22, 0xF4, 0x80, 0x42, 0x22, 0xF0, 0x70, 0x02, 0x92, 0xB2, 0x82, 0xF4, 0x00, 0x52, 0x22, 0x60, 0x22, 0x68, 0x22, 0xF4, 0xE0, 0x42, 0x22, 0xF0, 0x40, 0x02, 0x92, 0xB2, 0x82, 0xF0, 0x20, 0x02, 0x22, 0x60, 0x1B, 0x88, 0xD8, 0x06, 0x02, 0xD5, 0x23, 0x68, 0x19, 0x06, 0x07, 0xD5, 0x22, 0x68, 0x48, 0xF6, 0x0F, 0x73, 0x13, 0x40, 0x23, 0x60, 0x00, 0xF0, 0x61, 0xFC, 0x12, 0xE0, 0x1A, 0x05, 0x07, 0xD5, 0x22, 0x68, 0x40, 0xF6, 0x8F, 0x73, 0x13, 0x40, 0x23, 0x60, 0x00, 0xF0, 0x69, 0xFA, 0x08, 0xE0, 0x18, 0x04, 0xB6, 0xD5, 0x22, 0x68, 0x40, 0xF6, 0x8F, 0x73, 0x13, 0x40, 0x23, 0x60, 0x00, 0xF0, 0xCD, 0xFB, 0x23, 0x68, 0x2A, 0x88, 0x23, 0xF4, 0x80, 0x43, 0x23, 0xF0, 0x70, 0x03, 0x9B, 0xB2, 0xD1, 0x04, 0x48, 0xBF, 0x83, 0xF4, 0x80, 0x53, 0x95, 0x04, 0x21, 0x4A, 0x48, 0xBF, 0x83, 0xF4, 0x00, 0x53, 0x13, 0x60, 0x13, 0x68, 0x31, 0x88, 0x23, 0xF4, 0xE0, 0x43, 0x23, 0xF0, 0x40, 0x03, 0x9B, 0xB2, 0xCC, 0x06, 0x48, 0xBF, 0x83, 0xF0, 0x10, 0x03, 0x88, 0x06, 0x48, 0xBF, 0x83, 0xF0, 0x20, 0x03, 0x13, 0x60, 0x70, 0xBD, 0x93, 0x00, 0x03, 0xF1, 0x80, 0x43, 0x03, 0xF5, 0xB8, 0x43, 0x1D, 0x68, 0x29, 0x04, 0x09, 0xD5, 0x18, 0x68, 0x40, 0xF6, 0x8F, 0x71, 0x01, 0x40, 0x19, 0x60, 0x12, 0x4B, 0x01, 0x3A, 0x53, 0xF8, 0x22, 0x30, 0x98, 0x47, 0x2B, 0x06, 0x7F, 0xF5, 0x79, 0xAF, 0x21, 0x78, 0x48, 0xF6, 0x0F, 0x72, 0x8B, 0x00, 0x03, 0xF1, 0x80, 0x43, 0x03, 0xF5, 0xB8, 0x43, 0x18, 0x68, 0x01, 0x39, 0x02, 0x40, 0x1A, 0x60, 0x09, 0x4B, 0x53, 0xF8, 0x21, 0x30, 0x98, 0x47, 0x67, 0xE7, 0x70, 0xBD, 0x44, 0x5C, 0x00, 0x40, 0x0C, 0x03, 0x00, 0x20, 0x20, 0x03, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x40, 0x12, 0x03, 0x00, 0x20, 0x14, 0x03, 0x00, 0x20, 0x50, 0x00, 0x00, 0x20, 0x34, 0x00, 0x00, 0x20, 0x08, 0xB5, 0x07, 0x4A, 0x07, 0x4B, 0x08, 0x49, 0x13, 0x60, 0x02, 0x22, 0x1A, 0x72, 0x07, 0x4B, 0x07, 0x4A, 0x13, 0x60, 0x07, 0x4A, 0x1B, 0x68, 0x11, 0x60, 0x98, 0x47, 0x08, 0xBD, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x24, 0x03, 0x00, 0x20, 0x6C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x1C, 0x03, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x10, 0xB5, 0x06, 0x4C, 0x18, 0xB9, 0x23, 0x68, 0x01, 0x22, 0x1A, 0x82, 0x10, 0xBD, 0x04, 0x4B, 0x1B, 0x68, 0x1B, 0x68, 0x98, 0x47, 0x20, 0x68, 0x0A, 0x30, 0x10, 0xBD, 0x44, 0x03, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x10, 0xB5, 0x06, 0x4C, 0x18, 0xB9, 0x23, 0x68, 0x01, 0x22, 0x1A, 0x82, 0x10, 0xBD, 0x04, 0x4B, 0x1B, 0x68, 0x9B, 0x68, 0x98, 0x47, 0x20, 0x68, 0x0C, 0x30, 0x10, 0xBD, 0x44, 0x03, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x10, 0xB5, 0x20, 0x4B, 0x18, 0xB9, 0x1B, 0x68, 0x02, 0x22, 0x1A, 0x82, 0x10, 0xBD, 0x1E, 0x4A, 0x19, 0x68, 0x00, 0x20, 0x10, 0x80, 0x0C, 0x78, 0x13, 0x46, 0x14, 0xF0, 0x7F, 0x04, 0x0D, 0xD1, 0x4A, 0x7A, 0x91, 0x06, 0x44, 0xBF, 0x02, 0x21, 0x19, 0x70, 0x12, 0xF0, 0x40, 0x0F, 0x1A, 0x78, 0x14, 0xBF, 0x22, 0xF0, 0x01, 0x02, 0x42, 0xF0, 0x01, 0x02, 0x14, 0xE0, 0x01, 0x2C, 0x1F, 0xD0, 0x02, 0x2C, 0x1E, 0xD1, 0x09, 0x79, 0x01, 0xF0, 0x0F, 0x02, 0x92, 0x00, 0x02, 0xF1, 0x80, 0x42, 0x02, 0xF5, 0xB8, 0x42, 0x11, 0xF0, 0x80, 0x0F, 0x12, 0x68, 0x06, 0xD0, 0x02, 0xF0, 0x30, 0x02, 0x10, 0x2A, 0x07, 0xD1, 0x01, 0x22, 0x1A, 0x70, 0x04, 0xE0, 0x02, 0xF4, 0x40, 0x52, 0xB2, 0xF5, 0x80, 0x5F, 0xF6, 0xE7, 0x05, 0x4B, 0x1B, 0x68, 0x1B, 0x69, 0x98, 0x47, 0x02, 0x48, 0x10, 0xBD, 0x10, 0x46, 0x10, 0xBD, 0x44, 0x03, 0x00, 0x20, 0x4A, 0x03, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x23, 0x4A, 0x2D, 0xE9, 0xF8, 0x43, 0x14, 0x68, 0x90, 0x46, 0x23, 0x8A, 0x26, 0x7A, 0x21, 0x4F, 0xA3, 0xB9, 0x04, 0x2E, 0x12, 0xD1, 0x20, 0x49, 0x0A, 0x78, 0x01, 0x2A, 0x0A, 0xD1, 0x1F, 0x4A, 0x10, 0x68, 0x1F, 0x4A, 0x80, 0xB2, 0x02, 0x44, 0x52, 0x00, 0x13, 0x60, 0x30, 0x22, 0x3A, 0x80, 0x0B, 0x70, 0x27, 0xE0, 0x10, 0x23, 0x3B, 0x80, 0x07, 0x26, 0x23, 0xE0, 0xA5, 0x8A, 0xAB, 0x42, 0x8C, 0xBF, 0x02, 0x26, 0x04, 0x26, 0x9D, 0x42, 0x28, 0xBF, 0x1D, 0x46, 0x28, 0x46, 0xA3, 0x69, 0x98, 0x47, 0x81, 0x46, 0x00, 0x20, 0xFF, 0xF7, 0x57, 0xFE, 0x2A, 0x46, 0x01, 0x46, 0x48, 0x46, 0x00, 0xF0, 0x68, 0xFB, 0x29, 0x46, 0x00, 0x20, 0xFF, 0xF7, 0x6A, 0xFE, 0x23, 0x8A, 0x4F, 0xF4, 0x40, 0x52, 0x5B, 0x1B, 0x23, 0x82, 0x63, 0x8A, 0x1D, 0x44, 0x30, 0x23, 0x3B, 0x80, 0x09, 0x4B, 0x65, 0x82, 0x1A, 0x80, 0xD8, 0xF8, 0x00, 0x30, 0x1E, 0x72, 0xBD, 0xE8, 0xF8, 0x83, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x14, 0x03, 0x00, 0x20, 0x64, 0x0B, 0x00, 0x20, 0x50, 0x5C, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0x12, 0x03, 0x00, 0x20, 0x10, 0xB5, 0x0A, 0x4B, 0x0A, 0x49, 0x1B, 0x68, 0x49, 0x78, 0x9A, 0x78, 0x91, 0x42, 0x0A, 0xD3, 0xD9, 0x78, 0x41, 0xB9, 0x9C, 0x88, 0x34, 0xB9, 0x9A, 0x72, 0x06, 0x4B, 0x1B, 0x68, 0x5B, 0x68, 0x98, 0x47, 0x20, 0x46, 0x10, 0xBD, 0x02, 0x20, 0x10, 0xBD, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x38, 0xB5, 0x0E, 0x4A, 0x0E, 0x4C, 0x12, 0x68, 0x23, 0x68, 0x92, 0x69, 0x18, 0x79, 0x99, 0x78, 0x90, 0x47, 0x23, 0x68, 0x9A, 0x7A, 0x7A, 0xB1, 0x70, 0xB9, 0x5A, 0x79, 0x62, 0xB9, 0xDD, 0x78, 0x55, 0xB9, 0x08, 0x4B, 0x1B, 0x68, 0xDB, 0x68, 0x98, 0x47, 0x23, 0x68, 0x28, 0x46, 0x1A, 0x79, 0xDA, 0x72, 0x9A, 0x78, 0x1A, 0x73, 0x38, 0xBD, 0x02, 0x20, 0x38, 0xBD, 0x1C, 0x03, 0x00, 0x20, 0x44, 0x03, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x38, 0xB5, 0x2F, 0x4B, 0x1B, 0x68, 0x18, 0x78, 0x10, 0xF0, 0x7F, 0x00, 0x04, 0xD1, 0x5A, 0x7A, 0x22, 0xF0, 0x20, 0x02, 0x5A, 0x72, 0x38, 0xBD, 0x02, 0x28, 0x4E, 0xD1, 0x5A, 0x88, 0x00, 0x2A, 0x4C, 0xD1, 0x5A, 0x79, 0x00, 0x2A, 0x49, 0xD1, 0x1A, 0x79, 0x26, 0x4D, 0x22, 0xF0, 0x80, 0x00, 0x84, 0x00, 0x04, 0xF1, 0x80, 0x41, 0x01, 0xF5, 0xB8, 0x41, 0x09, 0x68, 0x2D, 0x78, 0x12, 0xF0, 0x80, 0x0F, 0x14, 0xBF, 0x01, 0xF0, 0x30, 0x01, 0x01, 0xF4, 0x40, 0x51, 0xA8, 0x42, 0x34, 0xD2, 0x00, 0x29, 0x32, 0xD0, 0x9B, 0x7A, 0x83, 0xB3, 0x04, 0xF1, 0x80, 0x44, 0x04, 0xF5, 0xB8, 0x44, 0x12, 0x06, 0x23, 0x68, 0x0C, 0xD5, 0x03, 0xF0, 0x30, 0x03, 0x10, 0x2B, 0x1F, 0xD1, 0xC4, 0xB2, 0x20, 0x46, 0xFF, 0xF7, 0xA5, 0xFD, 0x20, 0x46, 0x30, 0x21, 0xFF, 0xF7, 0x5F, 0xFD, 0x16, 0xE0, 0x03, 0xF4, 0x40, 0x53, 0xB3, 0xF5, 0x80, 0x5F, 0x11, 0xD1, 0x28, 0xB9, 0x0E, 0x4B, 0x93, 0xF8, 0x30, 0x10, 0xFF, 0xF7, 0xCF, 0xFD, 0x01, 0xE0, 0xFF, 0xF7, 0x82, 0xFD, 0x23, 0x68, 0x23, 0xF4, 0x80, 0x43, 0x23, 0xF0, 0x70, 0x03, 0x9B, 0xB2, 0x83, 0xF4, 0x40, 0x53, 0x23, 0x60, 0x07, 0x4B, 0x1B, 0x68, 0x5B, 0x69, 0x98, 0x47, 0x00, 0x20, 0x38, 0xBD, 0x02, 0x20, 0x38, 0xBD, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x38, 0xB5, 0x1D, 0x4B, 0x1D, 0x4D, 0x19, 0x68, 0x2D, 0x78, 0x0A, 0x79, 0x22, 0xF0, 0x80, 0x04, 0xA3, 0x00, 0x03, 0xF1, 0x80, 0x40, 0x00, 0xF5, 0xB8, 0x40, 0x00, 0x68, 0x12, 0xF0, 0x80, 0x0F, 0x14, 0xBF, 0x00, 0xF0, 0x30, 0x00, 0x00, 0xF4, 0x40, 0x50, 0xAC, 0x42, 0x22, 0xD2, 0x4C, 0x88, 0x04, 0xBB, 0xF8, 0xB1, 0x89, 0x7A, 0xE9, 0xB1, 0x03, 0xF1, 0x80, 0x43, 0x03, 0xF5, 0xB8, 0x43, 0x12, 0xF0, 0x80, 0x0F, 0x1A, 0x68, 0x07, 0xD0, 0x22, 0xF4, 0xE0, 0x42, 0x22, 0xF0, 0x40, 0x02, 0x92, 0xB2, 0x82, 0xF0, 0x10, 0x02, 0x06, 0xE0, 0x22, 0xF4, 0x80, 0x42, 0x22, 0xF0, 0x70, 0x02, 0x92, 0xB2, 0x82, 0xF4, 0x80, 0x52, 0x1A, 0x60, 0x05, 0x4B, 0x1B, 0x68, 0x9B, 0x69, 0x98, 0x47, 0x00, 0x20, 0x38, 0xBD, 0x02, 0x20, 0x38, 0xBD, 0x44, 0x03, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x08, 0xB5, 0x06, 0x4B, 0x1B, 0x68, 0x5A, 0x7A, 0x42, 0xF0, 0x20, 0x02, 0x5A, 0x72, 0x04, 0x4B, 0x1B, 0x68, 0xDB, 0x69, 0x98, 0x47, 0x00, 0x20, 0x08, 0xBD, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x05, 0x4B, 0x1A, 0x68, 0x53, 0x8A, 0x18, 0xB9, 0x89, 0x88, 0xCB, 0x1A, 0x13, 0x82, 0x70, 0x47, 0x08, 0x68, 0x18, 0x44, 0x70, 0x47, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x08, 0xB5, 0x0B, 0x4B, 0x00, 0x20, 0x93, 0xF8, 0x30, 0x10, 0xFF, 0xF7, 0x49, 0xFD, 0x09, 0x4B, 0x1B, 0x68, 0x18, 0x7A, 0x08, 0x28, 0x06, 0xD1, 0x07, 0x4B, 0x4F, 0xF4, 0x80, 0x52, 0x1A, 0x80, 0x06, 0x4B, 0x10, 0x22, 0x1A, 0x80, 0xB0, 0xF1, 0x09, 0x03, 0x58, 0x42, 0x58, 0x41, 0x08, 0xBD, 0x00, 0x00, 0x00, 0x20, 0x44, 0x03, 0x00, 0x20, 0x12, 0x03, 0x00, 0x20, 0x14, 0x03, 0x00, 0x20, 0x73, 0xB5, 0x96, 0x4E, 0x96, 0x4B, 0x32, 0x68, 0x96, 0x4D, 0x92, 0xB2, 0x13, 0x44, 0x5B, 0x00, 0x1A, 0x68, 0x2B, 0x68, 0x19, 0x7A, 0x09, 0x29, 0x0F, 0xD0, 0x92, 0xB2, 0x52, 0x00, 0x02, 0xF1, 0x80, 0x42, 0x02, 0xF5, 0xC0, 0x42, 0x11, 0x78, 0x19, 0x70, 0x51, 0x78, 0x59, 0x70, 0x91, 0x88, 0x59, 0x80, 0x11, 0x89, 0x99, 0x80, 0x92, 0x89, 0xDA, 0x80, 0x01, 0x22, 0x1A, 0x72, 0xDA, 0x88, 0x5C, 0x78, 0x00, 0x2A, 0x61, 0xD1, 0x1A, 0x78, 0x12, 0xF0, 0x7F, 0x02, 0x3A, 0xD1, 0x09, 0x2C, 0x02, 0xD1, 0xFF, 0xF7, 0xAB, 0xFE, 0x44, 0xE0, 0x05, 0x2C, 0x0F, 0xD1, 0x93, 0xF9, 0x02, 0x20, 0x00, 0x2A, 0x01, 0xDA, 0x08, 0x23, 0x4D, 0xE0, 0xDA, 0x78, 0x00, 0x2A, 0xFA, 0xD1, 0x9A, 0x88, 0x00, 0x2A, 0xF7, 0xD1, 0x9B, 0x7A, 0x00, 0x2B, 0x37, 0xD0, 0xF3, 0xE7, 0x03, 0x2C, 0x13, 0xD1, 0x9A, 0x78, 0x01, 0x2A, 0x07, 0xD0, 0x78, 0x4B, 0x20, 0x46, 0x1B, 0x68, 0x5B, 0x69, 0x98, 0x47, 0x03, 0x28, 0x28, 0xD1, 0x35, 0xE0, 0x9A, 0x88, 0x00, 0x2A, 0xF4, 0xD1, 0x5B, 0x7A, 0x98, 0x06, 0xF1, 0xD5, 0xFF, 0xF7, 0x6D, 0xFF, 0x1C, 0xE0, 0x01, 0x2C, 0xEC, 0xD1, 0x9A, 0x78, 0x01, 0x2A, 0xE9, 0xD1, 0x9A, 0x88, 0x00, 0x2A, 0xE6, 0xD1, 0x5B, 0x7A, 0x99, 0x06, 0xE3, 0xD5, 0xFF, 0xF7, 0xB5, 0xFE, 0x0E, 0xE0, 0x01, 0x2A, 0x04, 0xD1, 0x0B, 0x2C, 0xDC, 0xD1, 0xFF, 0xF7, 0x8A, 0xFE, 0x07, 0xE0, 0x02, 0x2A, 0xD7, 0xD1, 0x01, 0x2C, 0xF1, 0xD0, 0x03, 0x2C, 0xD3, 0xD1, 0xFF, 0xF7, 0x0D, 0xFF, 0x10, 0xB1, 0xCF, 0xE7, 0x00, 0x28, 0xBC, 0xD1, 0x32, 0x68, 0x5F, 0x4B, 0x92, 0xB2, 0x13, 0x44, 0x5B, 0x00, 0x00, 0x22, 0x1A, 0x60, 0x5D, 0x4B, 0x30, 0x22, 0x1A, 0x80, 0x06, 0x23, 0x00, 0xE0, 0x09, 0x23, 0x2A, 0x68, 0x13, 0x72, 0xD4, 0xE0, 0x06, 0x2C, 0x18, 0xD1, 0x1A, 0x78, 0x52, 0x06, 0x7C, 0xD1, 0xDA, 0x78, 0x54, 0x4B, 0x01, 0x2A, 0x02, 0xD1, 0x1B, 0x68, 0xDB, 0x69, 0x6C, 0xE0, 0x02, 0x2A, 0x02, 0xD1, 0x1B, 0x68, 0x1B, 0x6A, 0x67, 0xE0, 0x03, 0x2A, 0x02, 0xD1, 0x1B, 0x68, 0x5B, 0x6A, 0x62, 0xE0, 0x21, 0x2A, 0x69, 0xD1, 0x1B, 0x68, 0x9B, 0x6A, 0x5D, 0xE0, 0x00, 0x2C, 0x3C, 0xD1, 0x59, 0x88, 0x00, 0x29, 0x61, 0xD1, 0x5A, 0x68, 0x22, 0xF0, 0xFF, 0x02, 0xB2, 0xF5, 0x00, 0x3F, 0x5B, 0xD1, 0x1A, 0x78, 0x12, 0xF0, 0x7F, 0x02, 0x04, 0xD1, 0x9B, 0x88, 0x00, 0x2B, 0x00, 0xF0, 0xAB, 0x80, 0x52, 0xE0, 0x01, 0x2A, 0x0C, 0xD1, 0x3E, 0x4A, 0x18, 0x79, 0x12, 0x68, 0x92, 0x69, 0x90, 0x47, 0x00, 0x28, 0x49, 0xD1, 0x2B, 0x68, 0x9B, 0x7A, 0x00, 0x2B, 0x40, 0xF0, 0x9C, 0x80, 0x43, 0xE0, 0x02, 0x2A, 0x41, 0xD1, 0x1B, 0x79, 0x39, 0x48, 0x03, 0xF0, 0x0F, 0x01, 0x8A, 0x00, 0x02, 0xF1, 0x80, 0x42, 0x02, 0xF5, 0xB8, 0x42, 0x12, 0x68, 0x00, 0x78, 0x13, 0xF0, 0x80, 0x0F, 0x14, 0xBF, 0x02, 0xF0, 0x30, 0x02, 0x02, 0xF4, 0x40, 0x52, 0x81, 0x42, 0x2D, 0xD2, 0x13, 0xF0, 0x70, 0x0F, 0x2A, 0xD1, 0x00, 0x2A, 0x7F, 0xD1, 0x27, 0xE0, 0x08, 0x2C, 0x03, 0xD1, 0x1B, 0x78, 0x5B, 0x06, 0x7B, 0xD0, 0x21, 0xE0, 0x0A, 0x2C, 0x1F, 0xD1, 0x1A, 0x78, 0x02, 0xF0, 0x7F, 0x02, 0x01, 0x2A, 0x1A, 0xD1, 0x9A, 0x7A, 0xC2, 0xB1, 0x59, 0x88, 0xB1, 0xB9, 0x5A, 0x68, 0x22, 0xF0, 0xFF, 0x02, 0xB2, 0xF5, 0x80, 0x3F, 0x10, 0xD1, 0x1E, 0x4A, 0x18, 0x79, 0x12, 0x68, 0x92, 0x69, 0x90, 0x47, 0x00, 0x28, 0x64, 0xD0, 0x08, 0xE0, 0x3B, 0xB1, 0x2A, 0x68, 0x00, 0x24, 0x54, 0x82, 0x93, 0x61, 0x20, 0x46, 0x98, 0x47, 0x20, 0x46, 0x0A, 0xE0, 0x16, 0x4B, 0x1A, 0x68, 0x2B, 0x68, 0x12, 0x69, 0x58, 0x78, 0x90, 0x47, 0x03, 0x28, 0x02, 0xD1, 0x11, 0x4B, 0x1B, 0x68, 0x05, 0xE0, 0x2B, 0x68, 0x4F, 0xF6, 0xFF, 0x71, 0x1A, 0x8A, 0x8A, 0x42, 0x01, 0xD1, 0x09, 0x22, 0x03, 0xE0, 0x02, 0x28, 0x00, 0xD0, 0x12, 0xB9, 0x08, 0x22, 0x1A, 0x72, 0x39, 0xE0, 0x93, 0xF9, 0x00, 0x10, 0x00, 0x29, 0x2F, 0xDA, 0xD9, 0x88, 0x01, 0x91, 0x01, 0x98, 0x82, 0x42, 0x05, 0x48, 0x11, 0xD9, 0x01, 0x9A, 0x1A, 0x82, 0x1F, 0xE0, 0x00, 0xBF, 0x50, 0x5C, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0x44, 0x03, 0x00, 0x20, 0x1C, 0x03, 0x00, 0x20, 0x02, 0x30, 0x00, 0x20, 0x14, 0x03, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x8A, 0x42, 0x0E, 0xD2, 0x01, 0x68, 0x91, 0xF8, 0x30, 0x10, 0x8A, 0x42, 0x01, 0xD2, 0x00, 0x21, 0x05, 0xE0, 0x92, 0xFB, 0xF1, 0xF4, 0x01, 0xFB, 0x14, 0x22, 0x12, 0xB9, 0x01, 0x21, 0x0C, 0x4A, 0x11, 0x70, 0x02, 0x68, 0x92, 0xF8, 0x30, 0x20, 0x9A, 0x82, 0xFF, 0xF7, 0x2F, 0xFD, 0x05, 0xE0, 0x03, 0x22, 0x1A, 0x72, 0x07, 0x4B, 0x4F, 0xF4, 0x40, 0x52, 0x1A, 0x80, 0xFF, 0xF7, 0x84, 0xFE, 0x02, 0xB0, 0x70, 0xBD, 0x04, 0x4B, 0x9E, 0xE7, 0x04, 0x4B, 0x9C, 0xE7, 0x04, 0x4B, 0x9A, 0xE7, 0x64, 0x0B, 0x00, 0x20, 0x12, 0x03, 0x00, 0x20, 0x9D, 0x10, 0x00, 0x08, 0x55, 0x10, 0x00, 0x08, 0x79, 0x10, 0x00, 0x08, 0xF8, 0xB5, 0x2B, 0x4D, 0x2C, 0x68, 0x23, 0x7A, 0x03, 0x2B, 0x01, 0xD0, 0x05, 0x2B, 0x41, 0xD1, 0xA3, 0x69, 0x22, 0x8A, 0xAB, 0xB1, 0xA2, 0xB1, 0xA6, 0x8A, 0x96, 0x42, 0x28, 0xBF, 0x16, 0x46, 0x30, 0x46, 0x98, 0x47, 0x23, 0x8A, 0x07, 0x46, 0x9B, 0x1B, 0x23, 0x82, 0x63, 0x8A, 0x00, 0x20, 0x33, 0x44, 0x63, 0x82, 0xFF, 0xF7, 0x8A, 0xFB, 0x32, 0x46, 0x01, 0x46, 0x38, 0x46, 0x00, 0xF0, 0xA5, 0xF8, 0x23, 0x8A, 0x53, 0xB1, 0x1B, 0x4B, 0x00, 0x20, 0x4F, 0xF4, 0x40, 0x52, 0x01, 0x46, 0x1A, 0x80, 0xFF, 0xF7, 0x89, 0xFB, 0x18, 0x4B, 0x30, 0x22, 0x1A, 0x80, 0x23, 0x8A, 0xA2, 0x8A, 0x9A, 0x42, 0x02, 0xD8, 0x2B, 0x68, 0x03, 0x22, 0x02, 0xE0, 0x1B, 0xB1, 0x2B, 0x68, 0x05, 0x22, 0x1A, 0x72, 0x0C, 0xE0, 0x2A, 0x68, 0x06, 0x21, 0x11, 0x72, 0x10, 0x4A, 0x11, 0x68, 0x10, 0x4A, 0x89, 0xB2, 0x0A, 0x44, 0x52, 0x00, 0x13, 0x60, 0x0B, 0x4B, 0x30, 0x22, 0x1A, 0x80, 0x2B, 0x68, 0x1B, 0x7A, 0x06, 0xE0, 0x07, 0x2B, 0x03, 0xD1, 0x0A, 0x4B, 0x1B, 0x68, 0xDB, 0x68, 0x98, 0x47, 0x08, 0x23, 0x2A, 0x68, 0x13, 0x72, 0xBD, 0xE8, 0xF8, 0x40, 0xFF, 0xF7, 0x1B, 0xBE, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x12, 0x03, 0x00, 0x20, 0x14, 0x03, 0x00, 0x20, 0x50, 0x5C, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0x1C, 0x03, 0x00, 0x20, 0x30, 0xB5, 0x0B, 0x4B, 0x1C, 0x78, 0x00, 0x23, 0xA3, 0x42, 0x0C, 0xD2, 0x03, 0xF1, 0x80, 0x52, 0x02, 0xF5, 0xB8, 0x52, 0x91, 0x00, 0x0D, 0x68, 0x48, 0xF6, 0x8F, 0x72, 0x2A, 0x40, 0x1A, 0x43, 0x0A, 0x60, 0x01, 0x33, 0xF0, 0xE7, 0x03, 0x4B, 0x40, 0xF0, 0x80, 0x00, 0x18, 0x60, 0x30, 0xBD, 0x90, 0x00, 0x00, 0x20, 0x4C, 0x5C, 0x00, 0x40, 0x10, 0xB5, 0x13, 0x4C, 0x23, 0x68, 0x1A, 0x7A, 0x02, 0x2A, 0x01, 0xD0, 0x04, 0x2A, 0x04, 0xD1, 0xFF, 0xF7, 0x8A, 0xFC, 0x23, 0x68, 0x1B, 0x7A, 0x13, 0xE0, 0x06, 0x2A, 0x10, 0xD1, 0x5A, 0x78, 0x05, 0x2A, 0x09, 0xD1, 0x1A, 0x78, 0x52, 0x06, 0x06, 0xD1, 0x98, 0x78, 0xFF, 0xF7, 0xCC, 0xFF, 0x08, 0x4B, 0x1B, 0x68, 0x1B, 0x6A, 0x98, 0x47, 0x07, 0x4B, 0x1B, 0x68, 0x9B, 0x68, 0x98, 0x47, 0x08, 0x23, 0x22, 0x68, 0x13, 0x72, 0xBD, 0xE8, 0x10, 0x40, 0xFF, 0xF7, 0xCB, 0xBD, 0x00, 0xBF, 0x44, 0x03, 0x00, 0x20, 0x40, 0x03, 0x00, 0x20, 0x1C, 0x03, 0x00, 0x20, 0x30, 0xB5, 0x01, 0xF1, 0x00, 0x51, 0x01, 0x32, 0x01, 0xF5, 0x40, 0x51, 0x52, 0x10, 0x49, 0x00, 0x00, 0x23, 0x93, 0x42, 0x00, 0xF1, 0x02, 0x00, 0x09, 0xD0, 0x10, 0xF8, 0x01, 0x5C, 0x10, 0xF8, 0x02, 0x4C, 0x44, 0xEA, 0x05, 0x24, 0x21, 0xF8, 0x23, 0x40, 0x01, 0x33, 0xF1, 0xE7, 0x30, 0xBD, 0x10, 0xB5, 0x01, 0xF1, 0x00, 0x51, 0x01, 0x32, 0x01, 0xF5, 0x40, 0x51, 0x52, 0x10, 0x49, 0x00, 0x00, 0x23, 0x93, 0x42, 0x05, 0xD0, 0x51, 0xF8, 0x23, 0x40, 0x20, 0xF8, 0x13, 0x40, 0x01, 0x33, 0xF7, 0xE7, 0x10, 0xBD, 0xD5, 0x04, 0x00, 0x08, 0xFD, 0x01, 0x00, 0x08, 0xBB, 0x01, 0x00, 0x08, 0xBD, 0x01, 0x00, 0x08, 0xA5, 0x02, 0x00, 0x08, 0x49, 0x03, 0x00, 0x08, 0xBF, 0x01, 0x00, 0x08, 0x05, 0x03, 0x00, 0x08, 0x11, 0x03, 0x00, 0x08, 0x1D, 0x03, 0x00, 0x08, 0x3D, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xC9, 0x01, 0x00, 0x08, 0xCD, 0x01, 0x00, 0x08, 0xE5, 0x01, 0x00, 0x08, 0xE7, 0x01, 0x00, 0x08, 0xE9, 0x01, 0x00, 0x08, 0xEB, 0x01, 0x00, 0x08, 0xED, 0x01, 0x00, 0x08, 0xEF, 0x01, 0x00, 0x08, 0xF1, 0x01, 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x20, 0x12, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, 0x20, 0x14, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x20, 0x8E, 0x00, 0x00, 0x00, 0xEE, 0x01, 0x00, 0x20, 0x84, 0x00, 0x00, 0x00, 0x72, 0x02, 0x00, 0x20, 0x84, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0xAF, 0x1E, 0x03, 0x00, 0x01, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x09, 0x02, 0x2D, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x02, 0x04, 0x09, 0x04, 0x00, 0x01, 0x00, 0xFE, 0x01, 0x02, 0x05, 0x09, 0x04, 0x00, 0x02, 0x00, 0xFE, 0x01, 0x02, 0x06, 0x09, 0x21, 0x03, 0xFF, 0x00, 0x00, 0x08, 0x10, 0x01, 0x10, 0x03, 0x4C, 0x00, 0x4C, 0x00, 0x4D, 0x00, 0x20, 0x00, 0x30, 0x00, 0x30, 0x00, 0x33, 0x00, 0x09, 0x21, 0x03, 0xFF, 0x00, 0x00, 0x08, 0x10, 0x01, 0x12, 0x03, 0x4C, 0x00, 0x65, 0x00, 0x61, 0x00, 0x66, 0x00, 0x4C, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, 0xCC, 0x00, 0x00, 0x20, 0x12, 0x00, 0x00, 0x00, 0x14, 0x03, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x20, 0x00, 0x30, 0x00, 0x30, 0x00, 0x33, 0x00, 0x8E, 0x03, 0x42, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x63, 0x00, 0x31, 0x00, 0x20, 0x00, 0x45, 0x00, 0x52, 0x00, 0x52, 0x00, 0x4F, 0x00, 0x52, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x55, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x61, 0x00, 0x64, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x20, 0x00, 0x52, 0x00, 0x41, 0x00, 0x4D, 0x00, 0x20, 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x29, 0x00, 0x84, 0x03, 0x42, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x63, 0x00, 0x31, 0x00, 0x20, 0x00, 0x55, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x61, 0x00, 0x64, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x20, 0x00, 0x61, 0x00, 0x64, 0x00, 0x64, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x73, 0x00, 0x20, 0x00, 0x30, 0x00, 0x78, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x29, 0x00, 0x84, 0x03, 0x42, 0x00, 0x6F, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x72, 0x00, 0x63, 0x00, 0x31, 0x00, 0x20, 0x00, 0x55, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x61, 0x00, 0x64, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6F, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x20, 0x00, 0x61, 0x00, 0x64, 0x00, 0x64, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x73, 0x00, 0x20, 0x00, 0x30, 0x00, 0x78, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4D, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2D, 0x00, 0x6D, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x29, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x20, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x20, 0x00, 0x0C, 0x00, 0x20 }; #define BOARD_LED_PIN 33 typedef struct { volatile uint32 CR; volatile uint32 CFGR; volatile uint32 CIR; volatile uint32 APB2RSTR; volatile uint32 APB1RSTR; volatile uint32 AHBENR; volatile uint32 APB2ENR; volatile uint32 APB1ENR; volatile uint32 BDCR; volatile uint32 CSR; } RCC_RegStruct; typedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus; typedef enum { DISABLE = 0, ENABLE = !DISABLE} FunctionalState; typedef enum { ERROR = 0, SUCCESS = !ERROR} ErrorStatus; #define BOOTLOADER_FLASH ((uint32)0x08000000) #define PAGE_SIZE 1024 #define SET_REG(addr,val) do { *(volatile uint32*)(addr)=val; } while(0) #define GET_REG(addr) (*(volatile uint32*)(addr)) #define RCC ((uint32)0x40021000) #define FLASH ((uint32)0x40022000) #define RCC_CR RCC #define RCC_CFGR (RCC + 0x04) #define RCC_CIR (RCC + 0x08) #define RCC_AHBENR (RCC + 0x14) #define RCC_APB2ENR (RCC + 0x18) #define RCC_APB1ENR (RCC + 0x1C) #define FLASH_ACR (FLASH + 0x00) #define FLASH_KEYR (FLASH + 0x04) #define FLASH_OPTKEYR (FLASH + 0x08) #define FLASH_SR (FLASH + 0x0C) #define FLASH_CR (FLASH + 0x10) #define FLASH_AR (FLASH + 0x14) #define FLASH_OBR (FLASH + 0x1C) #define FLASH_WRPR (FLASH + 0x20) #define FLASH_KEY1 0x45670123 #define FLASH_KEY2 0xCDEF89AB #define FLASH_RDPRT 0x00A5 #define FLASH_SR_BSY 0x01 #define FLASH_CR_PER 0x02 #define FLASH_CR_PG 0x01 #define FLASH_CR_START 0x40 #define pRCC ((RCC_RegStruct *) RCC) bool flashErasePage(uint32 pageAddr) { uint32 rwmVal = GET_REG(FLASH_CR); rwmVal = FLASH_CR_PER; SET_REG(FLASH_CR, rwmVal); while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} SET_REG(FLASH_AR, pageAddr); SET_REG(FLASH_CR, FLASH_CR_START | FLASH_CR_PER); while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} /* todo: verify the page was erased */ rwmVal = 0x00; SET_REG(FLASH_CR, rwmVal); return true; } bool flashErasePages(uint32 pageAddr, uint16 n) { while (n-- > 0) { if (!flashErasePage(pageAddr + 0x400 * n)) { return false; } } return true; } bool flashWriteWord(uint32 addr, uint32 word) { volatile uint16 *flashAddr = (volatile uint16 *)addr; volatile uint32 lhWord = (volatile uint32)word & 0x0000FFFF; volatile uint32 hhWord = ((volatile uint32)word & 0xFFFF0000) >> 16; uint32 rwmVal = GET_REG(FLASH_CR); SET_REG(FLASH_CR, FLASH_CR_PG); /* apparently we need not write to FLASH_AR and can simply do a native write of a half word */ while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} *(flashAddr + 0x01) = (volatile uint16)hhWord; while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} *(flashAddr) = (volatile uint16)lhWord; while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} rwmVal &= 0xFFFFFFFE; SET_REG(FLASH_CR, rwmVal); /* verify the write */ if (*(volatile uint32 *)addr != word) { return false; } return true; } void flashLock() { /* take down the HSI oscillator? it may be in use elsewhere */ /* ensure all FPEC functions disabled and lock the FPEC */ SET_REG(FLASH_CR, 0x00000080); } void flashUnlock() { /* unlock the flash */ SET_REG(FLASH_KEYR, FLASH_KEY1); SET_REG(FLASH_KEYR, FLASH_KEY2); } /* Minimum_Source*/ void setupFLASH() { /* configure the HSI oscillator */ if ((pRCC->CR & 0x01) == 0x00) { uint32 rwmVal = pRCC->CR; rwmVal |= 0x01; pRCC->CR = rwmVal; } /* wait for it to come on */ while ((pRCC->CR & 0x02) == 0x00) {} } bool writeChunk(uint32 *ptr, int size, const char *data) { flashErasePage((uint32)(ptr)); for (int i = 0; i < size; i = i + 4) { if (!flashWriteWord((uint32)(ptr++), *((uint32 *)(data + i)))) { return false; } } return true; } bool isNewBootloaderAlreadyInstalled() { char *existingBootloader = (char *) BOOTLOADER_FLASH; int bootloaderSize=sizeof(maple_mini_boot20); for(int i=0;i(maple_mini_boot20); int n = 0; bool alreadyInstalled = isNewBootloaderAlreadyInstalled(); pinMode(BOARD_LED_PIN, OUTPUT); Serial.begin(9600); // Wait for the user to open the serial window. while (!(Serial.isConnected() && (Serial.getDTR() ))) { digitalWrite(BOARD_LED_PIN, !digitalRead(BOARD_LED_PIN)); delay(1000); // Slow blink } if (alreadyInstalled) { Serial.print("Congratulations. You have already updated to this version of the bootloader"); while(1); } digitalWrite(BOARD_LED_PIN, LOW); Serial.println ("**************************************************************************************************"); Serial.println ("*** This sketch will update the bootloader in the Maple Mini to the STM32duino bootloader ****"); Serial.println ("*** With this you can use up to 120KB of Flash and 20KB of RAM for a Sketch ****"); Serial.println ("*** Uploading is also considerably faster on OSX (and possibly faster on Linux) ****"); Serial.println ("*** ****"); Serial.println ("*** Only use with Maple mini boards ****"); Serial.println ("*** ****"); Serial.println ("*** WARNING. If the update fails your Maple mini may not have a functional bootloder. ****"); Serial.println ("*** ****"); Serial.println ("*** YOU UPDATE AT YOUR OWN RISK ****"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("**************************************************************************************************"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("*** To confirm and proceed, enter Y ****"); Serial.println ("*** ****"); while (Serial.read() != 'Y') { delay(1); } Serial.println ("*** ****"); n = sizeof(maple_mini_boot20); setupFLASH(); flashUnlock(); int success = 1; int pages = n/PAGE_SIZE; int currentPage=1; for (int i = 0; i < n; i += PAGE_SIZE) { int size = 0; uint32* chunk = (uint32 *)(BOOTLOADER_FLASH + i); size = n - i; if (size > PAGE_SIZE) { size = PAGE_SIZE; } if (!writeChunk(chunk, size, &bootloader[i])) { Serial.println (); Serial.println ("WARNING, Update Failed!! The sketch will restart in 3 seconds and you can try to flash again"); delay (3000); success = 0; break; } Serial.print("Writing flash page ");Serial.print(currentPage++);Serial.print(" of ");Serial.println(pages+1); } if (success) { flashLock(); Serial.println (); Serial.println ("Update completed successfully. - Please test by uploading a different sketch"); while (1) { digitalWrite(BOARD_LED_PIN, LOW); delay(500); digitalWrite(BOARD_LED_PIN, HIGH); delay(500); } } } void loop(){}

Mrburnette
Вт 23 июня 2015 г. 11:48
Rogerclark написал:Рэй и Виктор

Я взял версию Рэя и объединил ее в один файл и включил данные загрузчика в эскиз, чтобы его самостоятельно содержал.

Rogerclark
Вт 23 июня 2015 г., 21:59
Виктор и Рэй,

Я использовал версию, которую загрузил Рэй, так как у нее были все файлы в ZIP, и мне было легче добраться до работы, прежде чем я начал ее взламывать.

Я думаю, что некоторые из кодов могут сделать с очисткой, так как для цикла, который называет код написания куски, выглядит излишне сложным и, кажется, имеет смесь указателей и индексации массива.

Но это работает по мере того, как он стоит, и для изменения и тестирования это довольно много времени, особенно если я продолжаю перепрошать исходный загрузчик Maple Mini (от Leaflabs), используя USB -адаптер, просто чтобы подтвердить, что он будет обновлять от старый загрузчик.

Я думаю, что мое время, вероятно, лучше потратить на то, чтобы помочь людям установить общий загрузчик, используя UNO в качестве программиста. Было бы здорово, если бы мы могли написать эскиз AVR, который мог бы вести себя как STM32Flash.Exe и общаться напрямую с STM32 на борту серийного загрузчика.
Может быть просто возможно втиснуть его в Uno.

victor_pv
Чт, 02 июля 2015 г., 5:26 утра
Rogerclark написал:Рэй и Виктор

Я взял версию Рэя и объединил ее в один файл и включил данные загрузчика в эскиз, чтобы его самостоятельно содержал.

Я очистил сообщения, комментарии и т. Д

Я тестировал на оригинале Maple Mini, работающий с оригинальным загрузчиком Maple (загружен с сайта Leaflabs), а также с обновлением самостоятельно !


Редактировать.

Я только что немного обновил код, поэтому он проверяет, является ли версия установленного загрузчика, версия на эскизе.
Если так, он отображает сообщение и останавливается.

Rogerclark
Чт, 02 июля 2015 г., 5:50 утра
Привет, Виктор

Я много переработал код.

Все в Setup () сейчас, так как я не мог казаться ни одного смысла в том, что он находится в Loop (), так как он работает только один раз.

Это кажется довольно стабильным, и несколько человек использовали его для обновления. Поэтому я должен поместить файл в свою репо, возможно, в папке Binary

Aramperez
Чт 12 мая 2016 г., 12:13
Последний пост по началу работы на OS X - с июля 2015 года. Любое обновление, чтобы это работало с Arduino IDE V1.6.8?

Тиа,
Арам

Sheepdoll
Чт 12 мая 2016 г. 18:12
Арамперес написал:Последний пост по началу работы на OS X - с июля 2015 года. Любое обновление, чтобы это работало с Arduino IDE V1.6.8?

Тиа,
Арам

Rogerclark
Чт 12 мая 2016 г., 19:12
1.6.9 теперь официально доступно.

Пожалуйста, попробуйте использовать эту версию.

Я обновил Mac до 1.6.9 и это работало нормально, хотя у меня было 1.6.5 уже работая над Mac.

И у меня установлен DFU-UTIL через HomeBrew