diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..9a68e49 --- /dev/null +++ b/TODO.txt @@ -0,0 +1,4 @@ +Paul's list of needed code updates and cleanups: + +- Create generic host/scripts/app/dict.lua function that new dictionaries + can use until the point where they need custom transfer functions diff --git a/WindowsDriverPackage/7ZDP_LZMA.sfx b/WindowsDriverPackage/7ZDP_LZMA.sfx new file mode 100644 index 0000000..51982ec Binary files /dev/null and b/WindowsDriverPackage/7ZDP_LZMA.sfx differ diff --git a/WindowsDriverPackage/7zDP_LZMA.cfg b/WindowsDriverPackage/7zDP_LZMA.cfg new file mode 100644 index 0000000..3ca78f9 --- /dev/null +++ b/WindowsDriverPackage/7zDP_LZMA.cfg @@ -0,0 +1,6 @@ +;!@Install@!UTF-8! +RunProgram="dpscat.exe" +RunProgram="x86:dpinst32.exe" +RunProgram="x64:dpinst64.exe" +GUIMode="2" +;!@InstallEnd@! \ No newline at end of file diff --git a/WindowsDriverPackage/INL_Retro-Prog.inf b/WindowsDriverPackage/INL_Retro-Prog.inf new file mode 100644 index 0000000..67af5d3 Binary files /dev/null and b/WindowsDriverPackage/INL_Retro-Prog.inf differ diff --git a/WindowsDriverPackage/InstallDriver.exe b/WindowsDriverPackage/InstallDriver.exe new file mode 100644 index 0000000..024dea1 Binary files /dev/null and b/WindowsDriverPackage/InstallDriver.exe differ diff --git a/WindowsDriverPackage/Instructions.txt b/WindowsDriverPackage/Instructions.txt new file mode 100644 index 0000000..b01549c --- /dev/null +++ b/WindowsDriverPackage/Instructions.txt @@ -0,0 +1,64 @@ +/* Auto-generated By libusbK InfWizard +* +* DEVICE DRIVER CLIENT INSTALLER By Travis Lee Robinson (libusbdotnet@gmail.com) +* +* Summary: +* - libusbK client installers combine proven LZMA sfx technology with a professional driver installation tool +* creating a tightly packed and feature rich solution for end-user driver installations. +* +* FACTS: +* - Packaged in a modified LZMA sfx module. See: http://7zsfx.info/en. This module is highly configurable +* with installer-like options. +* - Uses dpinst.exe, by Microsoft. Dpinst.exe is a robust multi-language driver installation utility. This +* utility has a set of configurable wizard screens to ease end-user installations. Features also include: +* - Install multiple .inf files at once, each can contain multiple devices with multiple hardware +* identifiers. +* - Uninstall via add/remove programs. (removes from driver-store) +* - Silent/wizardless operation modes. +* - Simplistic xml-based configuration. (dpinst.xml) +* - Customizable EULA. +* - For a complete list of dpinst.exe features see: +* http://msdn.microsoft.com/en-us/library/windows/hardware/ff553383%28v=vs.85%29.aspx +* +* ORDER OF OPERATIONS (InstallDriver.exe - default config): +* -# End-user launches InstallDriver.exe. If not already running with elevated permssions, the user will +* immediately be prompted with a UAC warning: +* http://msdn.microsoft.com/en-us/library/windows/desktop/aa511445.aspx If you do not sign +* InstallDriver.exe with a code signing certificate, the UAC prompt will display "Unknown Name" and +* "Unknown Publisher" in the message box. Purchasing a cheap code signing certificate will allow you to +* set these values. +* -# SFX module:Extracts driver setup files to a temporary folder. +* -# SFX module:Runs dpscat.exe. This utility creates self signed catalog files from .inf files and the +* binaries they reference. These signed catalog files prevent windows from prompting the user with an +* unverified publisher warning: http://www.codeproject.com/KB/system/wiisensor/wiisensor10.png +* -# SFX module:Runs dpinst.exe. Device drivers are pre-installed. If the device has not been connected it +* will be available for use upon first connection. All devices known to windows matching your hardware IDs +* will be flagged for re-install. If the device is currently connected, drivers are immediately installed, +* the device is retarted and available immediately. +* -# SFX module:On wizard exit, removes the temporary extraction folder. +* +* ORDER OF OPERATIONS (re-pack-files.cmd - default config): +* -# The following files are compressed into a normal LZMA .7z file. +* - All ".inf" files in the current folder +* - All files and folders starting with "dpinst" in the current folder. +* - All files matching "dpscat.*" in the current folder. +* - All files and folders in the x86, amd64, and data sub-folders. (recursive) +* -# The SFX module, SFX config file and .7z file are merged together using a binary copy. +* eg: COPY /B sfx_module+sfx_config+files.7z installer.exe +* +* \note Run the "re-pack-files.cmd" batch file after modifying any part of the package. +* +* CUSTOMIZATION: +* - Customizing the SFX Module: +* - SFX customization is done in the "7zDP_LZMA.cfg" file. +* - See http://7zsfx.info/en/ +* - Customizing the driver installation: +* - dpinst.exe customization is done in the "dpinst.xml" file. +* - See http://msdn.microsoft.com/en-us/library/windows/hardware/ff553383%28v=vs.85%29.aspx +* - Other customization: +* - .inf file can be hand modified as needed. +* - Files can be added or removed as needed. +* - Icon and resource text can be changed with a standard resource editor such as ResourcHacker: +* http://www.angusj.com/resourcehacker/ +* +*/ diff --git a/WindowsDriverPackage/_DriverFiles.7z b/WindowsDriverPackage/_DriverFiles.7z new file mode 100644 index 0000000..b0814b5 Binary files /dev/null and b/WindowsDriverPackage/_DriverFiles.7z differ diff --git a/WindowsDriverPackage/amd64/libusb0.dll b/WindowsDriverPackage/amd64/libusb0.dll new file mode 100644 index 0000000..f916b08 Binary files /dev/null and b/WindowsDriverPackage/amd64/libusb0.dll differ diff --git a/WindowsDriverPackage/amd64/libusb0.sys b/WindowsDriverPackage/amd64/libusb0.sys new file mode 100644 index 0000000..0718dfb Binary files /dev/null and b/WindowsDriverPackage/amd64/libusb0.sys differ diff --git a/WindowsDriverPackage/amd64/libusbK.dll b/WindowsDriverPackage/amd64/libusbK.dll new file mode 100644 index 0000000..62f058a Binary files /dev/null and b/WindowsDriverPackage/amd64/libusbK.dll differ diff --git a/WindowsDriverPackage/dpinst.xml b/WindowsDriverPackage/dpinst.xml new file mode 100644 index 0000000..431935d --- /dev/null +++ b/WindowsDriverPackage/dpinst.xml @@ -0,0 +1,19 @@ + + + + + 1 + 1 + diff --git a/WindowsDriverPackage/dpinst32.exe b/WindowsDriverPackage/dpinst32.exe new file mode 100644 index 0000000..410a135 Binary files /dev/null and b/WindowsDriverPackage/dpinst32.exe differ diff --git a/WindowsDriverPackage/dpinst64.exe b/WindowsDriverPackage/dpinst64.exe new file mode 100644 index 0000000..0096441 Binary files /dev/null and b/WindowsDriverPackage/dpinst64.exe differ diff --git a/WindowsDriverPackage/dpscat.exe b/WindowsDriverPackage/dpscat.exe new file mode 100644 index 0000000..ac5d701 Binary files /dev/null and b/WindowsDriverPackage/dpscat.exe differ diff --git a/WindowsDriverPackage/re-pack-files.cmd b/WindowsDriverPackage/re-pack-files.cmd new file mode 100644 index 0000000..11c91d4 --- /dev/null +++ b/WindowsDriverPackage/re-pack-files.cmd @@ -0,0 +1,67 @@ +@ECHO OFF +SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION + +SET FILES_TO_PACK=*.inf dpinst* dpscat.* .\data* .\x86* .\amd64* +SET SFX_MODULE=7zDP_LZMA.sfx +SET SFX_MODULE_CFG=7zDP_LZMA.cfg +SET INSTALL_DRIVER_EXE=InstallDriver.exe +SET DRIVER_FILES_7Z=_DriverFiles.7z +SET 7Z_SWITCHES=-air0 -mx + +SET CMD_EXIT_CODE=0 + +IF EXIST "!7ZA_EXE!" (SET 7Z_RUN="!7ZA_EXE!") ELSE CALL :Find7Zip 7z.exe 7za.exe 7zan.exe +IF !7Z_RUN! EQU "" ( + ECHO 7Zip is required to re-pack this installer. + ECHO 1] Download and install 7Zip. http://www.7-zip.org/ + ECHO 2] Add the bin folder to the PATH environment variable. + ECHO "Control Panel->System->Advanced->Environment Variables..." + SET CMD_EXIT_CODE=1 + GOTO Error +) + +IF EXIST "!INSTALL_DRIVER_EXE!" DEL /Q "!INSTALL_DRIVER_EXE!" +IF NOT "!ERRORLEVEL!" EQU "0" ( + ECHO Access denied or file in-use "!INSTALL_DRIVER_EXE!" + SET CMD_EXIT_CODE=2 + GOTO Error +) + +IF EXIST "!DRIVER_FILES_7Z!" DEL /Q "!DRIVER_FILES_7Z!" +IF NOT "!ERRORLEVEL!" EQU "0" ( + ECHO Access denied or file in-use "!DRIVER_FILES_7Z!" + SET CMD_EXIT_CODE=3 + GOTO Error +) + +!7Z_RUN! a "!DRIVER_FILES_7Z!" !FILES_TO_PACK! !7Z_SWITCHES! +IF NOT "!ERRORLEVEL!" EQU "0" ( + ECHO Failed re-packing. Check your 7Zip installation at + ECHO !7Z_RUN! + SET CMD_EXIT_CODE=4 + GOTO Error +) + +COPY /B "!SFX_MODULE!"+"!SFX_MODULE_CFG!"+"!DRIVER_FILES_7Z!" "!INSTALL_DRIVER_EXE!" + +ECHO. +ECHO Done. +ECHO "!INSTALL_DRIVER_EXE!" re-packed! +GOTO :EOF + +:Find7Zip + SET 7Z_RUN="%~$PATH:1" + IF NOT !7Z_RUN! EQU "" ( + ECHO 7Zip found at: !7Z_RUN! + SET 7Z_RUN="%~1" + GOTO :EOF + ) + SHIFT /1 + IF "%~1" EQU "" GOTO :EOF + GOTO Find7Zip +GOTO :EOF + +:Error + IF NOT DEFINED NO_REPACK_ERROR_WAIT PAUSE + EXIT %CMD_EXIT_CODE% +GOTO :EOF \ No newline at end of file diff --git a/WindowsDriverPackage/x86/libusb0.sys b/WindowsDriverPackage/x86/libusb0.sys new file mode 100644 index 0000000..5322e5b Binary files /dev/null and b/WindowsDriverPackage/x86/libusb0.sys differ diff --git a/WindowsDriverPackage/x86/libusb0_x86.dll b/WindowsDriverPackage/x86/libusb0_x86.dll new file mode 100644 index 0000000..6e475b9 Binary files /dev/null and b/WindowsDriverPackage/x86/libusb0_x86.dll differ diff --git a/WindowsDriverPackage/x86/libusbK_x86.dll b/WindowsDriverPackage/x86/libusbK_x86.dll new file mode 100644 index 0000000..a52cb98 Binary files /dev/null and b/WindowsDriverPackage/x86/libusbK_x86.dll differ diff --git a/firmware/build_avr/avr_kazzo.elf b/firmware/build_avr/avr_kazzo.elf index fe29be5..403838c 100644 Binary files a/firmware/build_avr/avr_kazzo.elf and b/firmware/build_avr/avr_kazzo.elf differ diff --git a/firmware/build_avr/avr_kazzo.hex b/firmware/build_avr/avr_kazzo.hex index 3efb968..39639d5 100644 --- a/firmware/build_avr/avr_kazzo.hex +++ b/firmware/build_avr/avr_kazzo.hex @@ -1,4 +1,4 @@ -:100000000C9476000C9448160C9493000C94930076 +:100000000C9476000C9463160C9493000C9493005B :100010000C9493000C9493000C9493000C94930014 :100020000C9493000C9493000C9493000C94930004 :100030000C9493000C9493000C9493000C949300F4 @@ -13,744 +13,748 @@ :1000C00049006E00660069006E00690074006500FA :1000D0004E00650073004C006900760065007300F7 :1000E0002E0063006F006D000403090411241FBE7D -:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0EEE194 +:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0E4E59A :10010000FFE202C005900D92A630B107D9F723E0B7 -:10011000A6E0B1E001C01D92AD3DB207E1F70E943B -:100120005C170C948D170C9400000F931F93CF93C2 -:10013000DF93EC01FB01D9010091490110914A01C3 -:10014000888187FF09C08E818C93442399F00481B4 -:10015000158180E883831DC08FEF8C938E818093FF -:100160003401442309F44BC0709366036093650324 -:1001700080E9F0CFE0912101F09122018381883D57 -:10018000A1F50481158180E88383E0912101F0913C -:1001900022011782E0912101F091220183818039AF -:1001A000F1F48A81813711F08034C9F4E09165035C -:1001B000F09166030480F581E02D8C818083E091CD -:1001C0006503F09166030480F581E02D8D818183C4 -:1001D000E0916503F091660387818E5F8783C80194 -:1001E000DF91CF911F910F910895803D11F41C92E2 -:1001F000CCCF8FEF8C9380E10E946C10C6CFE09142 -:100200002101F09122018381811106C0F0936603E0 -:10021000E093650380E9B8CF883969F7E8CFE5E571 -:10022000F1E08FEF819391E0E536F907D9F78093FC -:100230004801809327018093470180932601809392 -:10024000380180931401809337018093130181E07A -:100250000C946C10CF93DF93FC0150E0CA01820F25 -:10026000911D4197E4F52223E1F183818F3FD9F578 -:1002700082818F3FD1F5DA01AB5ABE4FED0180E0AC -:1002800099919F3FA1F58F5F2813FACF6283138264 -:10029000982F9295990F907E915096831782108691 -:1002A0001182108211861286138614861586168690 -:1002B000178695E0440F551F9A95E1F720910001AC -:1002C00030910101420F531F5583448390E06D9399 -:1002D0009F5F8913FCCF80E0DF91CF9108958EEB73 -:1002E000FBCF82ECF9CF8FEBF7CF80ECF5CF81EC31 -:1002F000F3CFCF93DF93DC01EB019A0112969C912F -:10030000129780ED890F803318F513968C9113970F -:10031000813041F0E8F08230A9F08330B1F085EB14 -:10032000888346C0E4E2F1E0913509F476C048F5EF -:10033000913309F449C078F49923B9F19033E1F18C -:1003400084EBEECFE5E3F1E0EFCFE1E1F1E0ECCFDC -:10035000E5E4F1E0E9CF933309F446C0E8F19035E4 -:1003600079F7188286E0898386818A8383818B83EB -:1003700087818C8380858D8382818E8387858F831F -:1003800017C0903808F05FC0903708F055C090361D -:1003900079F19136C9F1923599F6188282E0898314 -:1003A00080818A8381818B8303C00E940F01188220 -:1003B000CE01DF91CF91089514968C9114971596E4 -:1003C0009C9191878287F3CF14968C911497159600 -:1003D0009C9193878487EBCF14968C9114971596F4 -:1003E0009C9195878687E3CF14968C918787DFCF82 -:1003F000188281E089831496ED91FC911597EB5A50 -:10040000FE4F80818A83D4CF188281E08983E09176 -:100410002101F09122018381F5CF188286E0898342 -:1004200081858A8382858B8383858C8384858D8374 -:1004300085858E838685A3CF40E0BF01CD01DF9106 -:10044000CF910C949500892F8770813049F0F8F096 -:10045000823001F1833009F062CFE1E1F1E002C0C6 -:10046000E4E2F1E0903808F4A3CF9838B0F0905966 -:10047000983008F09DCF188213968C91139780873F -:1004800014968D919C9115979183808391CFE5E48B -:10049000F1E0E8CFE5E3F1E0E5CF14964C91149755 -:1004A00015966C91159713962C91CF010E942A01F5 -:1004B00037CF90914801809127018F3F79F481E0F7 -:1004C0009F3F09F480E0909138019F3F09F083E05D -:1004D000909114019F3F09F084E0089582E0F3CFEA -:1004E000623059F421E08534920749F121E08432E9 -:1004F000920789F485E491E00EC0633069F421E04D -:1005000085349207E1F021E084329207D9F021E0AE -:100510008533920779F308956430E9F721E0853453 -:10052000920769F021E08432920761F021E085337F -:10053000920759F021E08131920769F7DBCF84E21D -:1005400091E0089585E391E0089581E191E00895B7 -:100550001F93CF93DF930E947210823D09F071C008 -:100560000E9459028093060185E491E09093220154 -:10057000809321010E947210823DA1F4D091060166 -:100580008091210190912201C1E0CD1708F45FC054 -:10059000909322018093210120E8FC01238380EDC8 -:1005A0000E946C100E947210823F41F480EF0E9402 -:1005B0006C10E0912101F091220113820E947210CF -:1005C000C82F803DE1F48091210190912201FC012E -:1005D00023812038A1F4609106010E94700290935B -:1005E000220180932101FC011782C3830E943F03F3 -:1005F000E0912101F0912201882371F183830E940F -:100600007210182F803FC9F4C0912101D0912201AE -:100610008B81883991F460910601CE010E947002AD -:100620009093220180932101FC0113821B83CE0150 -:100630000E94300A8823C9F08B83DF91CF911F91EC -:1006400008950E947210823F09F094CF89CF6D2FD8 -:100650000E947002CF5F99CF208580819181820FA7 -:10066000911D9183808388EDC9CF84EF8B8328858A -:1006700088819981820F911D99838883DECFEF92C3 -:10068000FF920F931F93CF93DF93EC01E880F980E3 -:100690001E2D8985823109F4F8C068F4803191F00B -:1006A000813109F490C083ECDF91CF911F910F91BC -:1006B000FF90EF900895833109F4EAC0843199F7EF -:1006C00080E0F2CF8D85813091F441E060E180E0FF -:1006D00090E80E94D60FB70186E0769567958A95D7 -:1006E000E1F76F7040E080E090EE0E94D60F8D85BC -:1006F0008330A9F41E2D1F7B6881798106E07695F1 -:1007000067950A95E1F7CB0199278D589B410E9487 -:100710008C0E612F60680FEF2E814A8141C08E31AF -:1007200061F41E2D1F7B68817981B6E0769567950F -:10073000BA95E1F780E090ECEACF823211F08B308D -:1007400069F468817981660F672F661F770B719551 -:10075000CB0199278C5691090E948C0E8D858C3186 -:10076000B1F408811981000F012F001F110B1195A1 -:1007700061E880E090E50E948C0E602F80E090E8B8 -:100780000E948C0E60E080E090E50E948C0E8D85CA -:100790001E2D8F3151F010680FEF2E814A81612F8D -:1007A0008C819D810E942D0F6EC01F78106868811A -:1007B0007981E4E076956795EA95E1F780E090E548 -:1007C0000E948C0EE9CF8D85811109C00FEF2E811B -:1007D0004A816E2D8C819D810E94650F8F838D854E -:1007E0008B30C1F46881798155E0769567955A958B -:1007F000E1F76295607F8FEF9FEF0E948C0E1E2DB8 -:100800001F710FEF2E814A81612F8C819D810E9483 -:10081000650F8F838D858E3FA9F46881798145E0CE -:10082000769567954A95E1F78FEF9FE30E94B60EA4 -:100830001F710FEF2E814A81612F8C819D810E9453 -:100840009D0F8F838D85813009F03ACFE880F98044 -:1008500034E0F694E7943A95E1F741E060E180E016 -:1008600090E80E94D60F6E2D6F7140E080E090EA14 -:100870000E94D60F612F6F700FEF2E814A818C81FD -:100880009D810E94650F8F831BCF6E2D606643CFC5 -:100890008FEF84B9C701880F892F881F990B919515 -:1008A00085B95F9A5F9814B86E2D60680FEF2E813E -:1008B0004A818C819D810E94A513E5CF3F924F9282 -:1008C0005F926F927F928F929F92AF92BF92CF92E0 -:1008D000DF92EF92FF920F931F93CF93DF934A0122 -:1008E0003901D8011796CC91D0E0462E512C542CCA -:1008F0004424D80116968C91169790E08C179D078A -:10090000A8F41796CC9380E0DF91CF911F910F91BF -:10091000FF90EF90DF90CF90BF90AF909F908F901F -:100920007F906F905F904F903F9008956AEAC40166 -:10093000F701099565E5C301F701099560EAC4016E -:10094000F7010995CE0199275C01A428B528D801A3 -:100950001496ED91FC911597E80FF91F6081C50180 -:10096000F70109950E942915C501F6010995382E50 -:10097000C501F60109953812F5CF2196BACF2F920D -:100980003F924F925F926F927F928F929F92AF921F -:10099000BF92CF92DF92EF92FF920F931F93CF936C -:1009A000DF93CDB7DEB727970FB6F894DEBF0FBE43 -:1009B000CDBF582E4A013C832B831F830E83D80161 -:1009C00017964C90042D10E070E0F62FEE27FA8376 -:1009D000E983252C312CFDE82F1AFBE13F0AAE817B -:1009E000BF8116968C91169790E080179107E0F4DE -:1009F00017964C9280E027960FB6F894DEBF0FBE94 -:100A0000CDBFDF91CF911F910F91FF90EF90DF90BD -:100A1000CF90BF90AF909F908F907F906F905F909E -:100A20004F903F902F90089560E083E794EE0E94EE -:100A30008C0E6AEAC401F701099565E58B819C81FA -:100A4000F701099560EAC401F7010995652DC10117 -:100A50000E948C0E642C712CA980BA80A628B7281D -:100A6000AE81BF811496ED91FC911597E60DF71DAF -:100A70006081C501F70109950E942915C501F6019C -:100A80000995282FC5012D83F60109952D8128137D -:100A9000F3CFAE81BF8114968D919C911597680E0E -:100AA000791EF3018081281307C043940F5F1F4F05 -:100AB0005198599A599893CF519A599A90CF2F9209 -:100AC0003F924F925F926F927F928F929F92AF92DE -:100AD000BF92CF92DF92EF92FF920F931F93CF932B -:100AE000DF9300D000D01F92CDB7DEB7382E4A0179 -:100AF00029011D830C83D80117962C90022D10E03C -:100B000070E0F62FEE27FA83E983AC81BD8116965B -:100B10008C91169790E080179107D8F417962C9235 -:100B200080E00F900F900F900F900F90DF91CF917A -:100B30001F910F91FF90EF90DF90CF90BF90AF90FB -:100B40009F908F907F906F905F904F903F902F90ED -:100B5000089561E080E090EC0E948C0E6AEAC40186 -:100B6000F701099560E080E090EC0E948C0E65E54D -:100B7000C201F701099561E080E090EC0E948C0EC3 -:100B800060EAC401F7010995632D80E090EC0E94B2 -:100B90008C0E622C712CA980BA80A628B728AC8153 -:100BA000BD811496ED91FC911597E60DF71D6081BE -:100BB000C501F70109950E942915C501F60109959E -:100BC000282FC5012B83F60109952B812813F3CF1C -:100BD000AC81BD8114968D919C911597680E791EFC -:100BE000F3018081281307C023940F5F1F4F519892 -:100BF000599A59988ACF519A599A87CF2F923F92F2 -:100C00004F925F926F927F928F929F92AF92BF921C -:100C1000CF92DF92EF92FF920F931F93CF93DF93C8 -:100C200000D000D01F92CDB7DEB7582E4A0119016F -:100C30001D830C83D80117964C90042D10E070E0B2 -:100C4000F62FEE27FA83E983AC81BD8116968C914D -:100C5000169790E080179107D8F417964C9280E091 -:100C60000F900F900F900F900F90DF91CF911F91E9 -:100C70000F91FF90EF90DF90CF90BF90AF909F903B -:100C80008F907F906F905F904F903F902F9008953E -:100C900040E060E180E090E80E94D60F6AEAC4017B -:100CA000F701099565E5C101F701099560EAC401FD -:100CB000F7010995A42CB12C69807A806A287B28D9 -:100CC000AC81BD811496ED91FC911597EA0DFB1D49 -:100CD0006081C301F701099541E060E180E090E89F -:100CE0000E94D60F40E0652D80E090EE0E94D60F66 -:100CF0000E942915C301F6010995282FC3012B83F2 -:100D0000F60109952B812813F3CFAC81BD81149690 -:100D10008D919C911597A80EB91EF501808128131D -:100D200007C043940F5F1F4F5198599A59988CCF21 -:100D300041E060E180E090E80E94D60F40E0652D40 -:100D400080E090EE0E94D60F519A599A7DCF3F9243 -:100D50004F925F926F927F928F929F92AF92BF92CB -:100D6000CF92DF92EF92FF920F931F93CF93DF9377 -:100D7000482E662E7A01E901DA0117965C90A52CBF -:100D8000B12C6AEA8AEA9AE8F901099565E585E5F0 -:100D900095E8FE01099560E28AEA9AE8FE01099564 -:100DA000712C762C6624D70116968C91169790E0BC -:100DB0008A159B0520F517965C9260E980E090E823 -:100DC000FE01099560E080E090E8FE01099560EF82 -:100DD00080E090E8FE01099580E0DF91CF911F91BE -:100DE0000F91FF90EF90DF90CF90BF90AF909F90CA -:100DF0008F907F906F905F904F903F90089564E543 -:100E000080E090E50E948C0E852C912C6401C62810 -:100E1000D72860EAC601FE010995D7011496ED9125 -:100E2000FC911597E80DF91D6081C601FE01099539 -:100E30000E942915C601F8010995382EC601F8014E -:100E400009953812F5CFD70114968D919C9115977D -:100E5000880E991EF4018081381208C05394FFEF68 -:100E6000AF1ABF0A5198599A59989DCF61E880E00E -:100E700090E50E948C0E642D80E090E80E948C0E1C -:100E800064E580E090E50E948C0E519A599A8BCFD0 -:100E90004F925F926F927F928F929F92AF92BF928A -:100EA000CF92DF92EF92FF920F931F93CF93DF9336 -:100EB000662E7A01E901DA0117965C90A52CB12C17 -:100EC0006AEA8AEA9AE8F901099565E585E595E80F -:100ED000FE01099560E28AEA9AE8FE010995712C03 -:100EE000762C6624D70116968C91169790E08A1579 -:100EF0009B0518F517965C9260E980E090E8FE018A -:100F0000099560E080E090E8FE01099560EF80E0DF -:100F100090E8FE01099580E0DF91CF911F910F913C -:100F2000FF90EF90DF90CF90BF90AF909F908F9009 -:100F30007F906F905F904F900895852C912C640165 -:100F4000C628D72860EAC601FE010995D701149684 -:100F5000ED91FC911597E80DF91D6081C601FE0128 -:100F600009950E942915C601F8010995482EC60168 -:100F7000F80109954812F5CFD70114968D919C91EF -:100F80001597880E991EF4018081481208C0539469 -:100F9000FFEFAF1ABF0A5198599A5998A3CF519AA7 -:100FA000599AA0CF4F925F926F927F928F929F92A9 -:100FB000AF92BF92CF92DF92EF92FF920F931F9367 -:100FC000CF93DF93EA0169015F80A52CB12CE62E57 -:100FD000F12CFE2CEE248E8190E08A159B0598F46E -:100FE0005F8280E0DF91CF911F910F91FF90EF9092 -:100FF000DF90CF90BF90AF909F908F907F906F9039 -:101000005F904F9008956AEA85E595E1F6010995AC -:1010100065E58AEA9AE0F601099560EA85E595E1D9 -:10102000F6010995652C712C43018E289F28EC81CF -:10103000FD81E60DF71D6081C401F60109950E944E -:101040002915C401F8010995482EC401F801099534 -:101050004812F5CF8C819D81680E791EF301808145 -:10106000481208C05394FFEFAF1ABF0A5198599A1B -:101070005998B1CF519A599AAECF3F924F925F9201 -:101080006F927F928F929F92AF92BF92CF92DF9298 -:10109000EF92FF920F931F93CF93DF93EA016901C1 -:1010A0005F80A52CB12C482E429480EF4822E62E7A -:1010B000F12CFE2CEE248E8190E08A159B05A0F485 -:1010C0005F8280E0DF91CF911F910F91FF90EF90B1 -:1010D000DF90CF90BF90AF909F908F907F906F9058 -:1010E0005F904F903F90089560E280E090E80E940A -:1010F0008C0E6AEA85E595E1F601099560E180E0EC -:1011000090E80E948C0E65E58AEA9AE0F60109955E -:1011100060E280E090E80E948C0E60EA85E595E14F -:10112000F6010995642D80E090E80E948C0E652CF4 -:10113000712C43018E289F28EC81FD81E60DF71D5F -:101140006081C401F60109950E942915C401F801C6 -:101150000995382EC401F80109953812F5CF8C8114 -:101160009D81680E791EF3018081381208C0539466 -:10117000FFEFAF1ABF0A5198599A59989CCF519ACC -:10118000599A99CF4F925F926F927F928F929F92CE -:10119000AF92BF92CF92DF92EF92FF920F931F9385 -:1011A000CF93DF93662E7A01E901DA0117965C90FE -:1011B000A52CB12C6AEA8AEA9AE0F901099565E55D -:1011C00085E595E0FE01099560E28AEA9AE0FE0174 -:1011D0000995712C762C6624D70116968C9116975A -:1011E00090E08A159B0518F517965C9260E980E0FF -:1011F00090E0FE01099560E080E090E0FE01099535 -:1012000060EF80E090E0FE01099580E0DF91CF91F2 -:101210001F910F91FF90EF90DF90CF90BF90AF9014 -:101220009F908F907F906F905F904F900895852C46 -:10123000912C6401C628D72860EAC601FE010995F1 -:10124000D7011496ED91FC911597E80DF91D608179 -:10125000C601FE0109950E942915C601F8010995EC -:10126000482EC601F80109954812F5CFD70114960A -:101270008D919C911597880E991EF40180814812DA -:1012800008C05394FFEFAF1ABF0A5198599A599862 -:10129000A3CF519A599AA0CF4F925F926F927F92AB -:1012A0008F929F92AF92BF92CF92DF92EF92FF9276 -:1012B0000F931F93CF93DF93662E7A01E901DA0132 -:1012C00017965C90852C912CA895589800000000EA -:1012D0000000000000000000000000006AEA8AEA46 -:1012E0009AE0F901099565E585E595E0FE01099526 -:1012F00060E28AEA9AE0FE010995712C762C662458 -:10130000D70116968C91169790E08815990520F5CF -:1013100017965C9260E980E090E0FE01099560E03C -:1013200080E090E0FE01099560EF80E090E0FE0132 -:101330000995589A80E0DF91CF911F910F91FF900E -:10134000EF90DF90CF90BF90AF909F908F907F9065 -:101350006F905F904F90089580EA0E949813C52C7B -:10136000D12C5601A628B728D7011496ED91FC91EF -:101370001597EC0DFD1D6081C501FE010995589A78 -:10138000000000000000000000000000000000005D -:10139000A8950E942915C501F801099558980000E3 -:1013A0000000000000000000000000000000D70165 -:1013B0001496ED91FC911597EC0DFD1D4080841560 -:1013C000C1F0589A0000000000000000000000007A -:1013D00000000000482EC501F801099558984812F0 -:1013E0001BC0000000000000000000000000000022 -:1013F0000000D70114968D919C911597C80ED91EA7 -:10140000F6018081481229C05394FFEF8F1A9F0A7A -:101410005198599A599874CF0000000000000000BC +:10011000A6E0B1E001C01D92A13EB207E1F70E9446 +:1001200077170C94A8170C94000080E008950895A8 +:100130000F931F93CF93DF93EC01FB01D901009143 +:100140004D0110914E01888187FF09C08E818C93EB +:10015000442399F00481158180E883831DC08FEFCB +:100160008C938E8180933801442309F44BC07093A3 +:100170006A036093690380E9F0CFE0912501F09173 +:1001800026018381883DA1F50481158180E8838360 +:10019000E0912501F09126011782E0912501F0916F +:1001A000260183818039F1F48A81813711F080340E +:1001B000C9F4E0916903F0916A030480F581E02DB0 +:1001C0008C818083E0916903F0916A030480F5815A +:1001D000E02D8D818183E0916903F0916A0387812D +:1001E0008E5F8783C801DF91CF911F910F91089592 +:1001F000803D11F41C92CCCF8FEF8C9380E10E9454 +:100200007510C6CFE0912501F091260183818111FF +:1002100006C0F0936A03E093690380E9B8CF883998 +:1002200069F7E8CFE9E5F1E08FEF819391E0E936F6 +:10023000F907D9F780934C0180932B0180934B01F0 +:1002400080932A0180933C018093180180933B01A5 +:100250008093170181E00C947510CF93DF93FC011C +:1002600050E0CA01820F911D4197E4F52223E1F18C +:1002700083818F3FD9F582818F3FD1F5DA01A75A6B +:10028000BE4FED0180E099919F3FA1F58F5F28134C +:10029000FACF62831382982F9295990F907E915096 +:1002A0009683178210861182108211861286138619 +:1002B000148615861686178695E0440F551F9A9565 +:1002C000E1F72091000130910101420F531F558346 +:1002D000448390E06D939F5F8913FCCF80E0DF91B2 +:1002E000CF9108958EEBFBCF82ECF9CF8FEBF7CF58 +:1002F00080ECF5CF81ECF3CFCF93DF93DC01EB0102 +:100300009A0112969C91129780ED890F803318F50F +:1003100013968C911397813041F0E8F08230A9F068 +:100320008330B1F085EB888346C0E8E2F1E0913597 +:1003300009F476C048F5913309F449C078F499235B +:10034000B9F19033E1F184EBEECFE9E3F1E0EFCFE7 +:10035000E5E1F1E0ECCFE9E4F1E0E9CF933309F432 +:1003600046C0E8F1903579F7188286E08983868166 +:100370008A8383818B8387818C8380858D8382812F +:100380008E8387858F8317C0903808F05FC09037C1 +:1003900008F055C0903679F19136C9F1923599F649 +:1003A000188282E0898380818A8381818B8303C064 +:1003B0000E9412011882CE01DF91CF910895149608 +:1003C0008C91149715969C9191878287F3CF149600 +:1003D0008C91149715969C9193878487EBCF1496F4 +:1003E0008C91149715969C9195878687E3CF1496E8 +:1003F0008C918787DFCF188281E089831496ED91F5 +:10040000FC911597E75AFE4F80818A83D4CF1882DA +:1004100081E08983E0912501F09126018381F5CF68 +:10042000188286E0898381858A8382858B83838590 +:100430008C8384858D8385858E838685A3CF40E0DC +:10044000BF01CD01DF91CF910C949800892F877067 +:10045000813049F0F8F0823001F1833009F062CF49 +:10046000E5E1F1E002C0E8E2F1E0903808F4A3CF62 +:100470009838B0F09059983008F09DCF18821396B4 +:100480008C911397808714968D919C9115979183E9 +:10049000808391CFE9E4F1E0E8CFE9E3F1E0E5CF53 +:1004A00014964C91149715966C91159713962C9160 +:1004B000CF010E942D0137CF90914C0180912B01EB +:1004C0008F3F79F481E09F3F09F480E090913C01F7 +:1004D0009F3F09F083E0909118019F3F09F084E06D +:1004E000089582E0F3CF623059F421E08934920715 +:1004F00049F121E08832920789F489E491E00EC045 +:10050000633069F421E089349207E1F021E0883218 +:100510009207D9F021E08933920779F30895643086 +:10052000E9F721E08934920769F021E088329207E7 +:1005300061F021E08933920759F021E0853192077B +:1005400069F7DBCF88E291E0089589E391E00895AF +:1005500085E191E008951F93CF93DF930E947B1074 +:10056000823D09F071C00E945C028093060189E41B +:1005700091E090932601809325010E947B10823D9B +:10058000A1F4D09106018091250190912601C1E04E +:10059000CD1708F45FC0909326018093250120E8D1 +:1005A000FC01238380ED0E9475100E947B10823F26 +:1005B00041F480EF0E947510E0912501F091260131 +:1005C00013820E947B10C82F803DE1F480912501A9 +:1005D00090912601FC0123812038A1F4609106014D +:1005E0000E9473029093260180932501FC011782DB +:1005F000C3830E944203E0912501F09126018823E4 +:1006000071F183830E947B10182F803FC9F4C09141 +:100610002501D09126018B81883991F460910601E2 +:10062000CE010E9473029093260180932501FC0164 +:1006300013821B83CE010E942A0A8823C9F08B8370 +:10064000DF91CF911F9108950E947B10823F09F0A6 +:1006500094CF89CF6D2F0E947302CF5F99CF2085F1 +:1006600080819181820F911D9183808388EDC9CF14 +:1006700084EF8B83288588819981820F911D9983CE +:100680008883DECFEF92FF920F931F93CF93DF9378 +:10069000EC01E880F9801E2D8985823109F4F8C0CB +:1006A00068F4803191F0813109F490C083ECDF91DE +:1006B000CF911F910F91FF90EF900895833109F42E +:1006C000EAC0843199F780E0F2CF8D85813091F4D2 +:1006D00041E060E180E090E80E94DF0FB701B6E002 +:1006E00076956795BA95E1F76F7040E080E090EEFF +:1006F0000E94DF0F8D858330A9F41E2D1F7B68813A +:100700007981A6E076956795AA95E1F7CB019927BF +:100710008D589B410E94910E612F60680FEF2E81D2 +:100720004A8141C08E3161F41E2D1F7B6881798121 +:10073000F6E076956795FA95E1F780E090ECEACFE0 +:10074000823211F08B3069F468817981660F672FEE +:10075000661F770B7195CB0199278C5691090E94E2 +:10076000910E8D858C31B1F408811981000F012F14 +:10077000001F110B119561E880E090E50E94910E39 +:10078000602F80E090E80E94910E60E080E090E5AC +:100790000E94910E8D851E2D8F3151F010680FEF44 +:1007A0002E814A81612F8C819D810E94320F6EC003 +:1007B0001F7810686881798144E0769567954A953D +:1007C000E1F780E090E50E94910EE9CF8D858111DF +:1007D00009C00FEF2E814A816E2D8C819D810E9470 +:1007E0006E0F8F838D858B30C1F46881798135E000 +:1007F000769567953A95E1F76295607F8FEF9FEF69 +:100800000E94910E1E2D1F710FEF2E814A81612FC4 +:100810008C819D810E946E0F8F838D858E3FA9F400 +:100820006881798125E0769567952A95E1F78FEFC4 +:100830009FE30E94BB0E1F710FEF2E814A81612F33 +:100840008C819D810E94A60F8F838D85813009F058 +:100850003ACFE880F98094E0F694E7949A95E1F72E +:1008600041E060E180E090E80E94DF0F6E2D6F7143 +:1008700040E080E090EA0E94DF0F612F6F700FEF81 +:100880002E814A818C819D810E946E0F8F831BCFA8 +:100890006E2D606643CF8D85811117C01E2D1068A7 +:1008A000EE0CEF2CEE1CFF08F1946E2D8FEF84B947 +:1008B00065B95F9A5F9814B80FEF2E814A81612F56 +:1008C0008C819D810E94B113E1CF813079F76F2D2A +:1008D0006F736064EBCF3F924F925F926F927F9203 +:1008E0008F929F92AF92BF92CF92DF92EF92FF9240 +:1008F0000F931F93CF93DF934A013901D8011796C5 +:10090000CC91D0E0462E512C542C4424D80116967C +:100910008C91169790E08C179D07A8F41796CC93AE +:1009200080E0DF91CF911F910F91FF90EF90DF90CA +:10093000CF90BF90AF909F908F907F906F905F907F +:100940004F903F9008956AEAC401F701099565E563 +:10095000C301F701099560EAC401F7010995CE01C9 +:1009600099275C01A428B528D8011496ED91FC9133 +:100970001597E80FF91F6081C501F70109950E94DD +:100980004415C501F6010995382EC501F6010995F2 +:100990003812F5CF2196BACF2F923F924F925F92A5 +:1009A0006F927F928F929F92AF92BF92CF92DF927F +:1009B000EF92FF920F931F93CF93DF93CDB7DEB7E4 +:1009C00027970FB6F894DEBF0FBECDBF582E4A0151 +:1009D0003C832B831F830E83D80117964C90042DE4 +:1009E00010E070E0F62FEE27FA83E983252C312CF6 +:1009F000FDE82F1AFBE13F0AAE81BF8116968C916C +:100A0000169790E080179107E0F417964C9280E0DB +:100A100027960FB6F894DEBF0FBECDBFDF91CF9102 +:100A20001F910F91FF90EF90DF90CF90BF90AF900C +:100A30009F908F907F906F905F904F903F902F90FE +:100A4000089560E083E794EE0E94910E6AEAC40183 +:100A5000F701099565E58B819C81F701099560EAAD +:100A6000C401F7010995652DC1010E94910E642C06 +:100A7000712CA980BA80A628B728AE81BF811496B0 +:100A8000ED91FC911597E60DF71D6081C501F70109 +:100A900009950E944415C501F6010995282FC50145 +:100AA0002D83F60109952D812813F3CFAE81BF81E7 +:100AB00014968D919C911597680E791EF301808193 +:100AC000281307C043940F5F1F4F5198599A5998A4 +:100AD00093CF519A599A90CF2F923F924F925F9213 +:100AE0006F927F928F929F92AF92BF92CF92DF923E +:100AF000EF92FF920F931F93CF93DF9300D000D01C +:100B00001F92CDB7DEB7382E4A0129011D830C8311 +:100B1000D80117962C90022D10E070E0F62FEE27EA +:100B2000FA83E983AC81BD8116968C91169790E08B +:100B300080179107D8F417962C9280E00F900F90B1 +:100B40000F900F900F90DF91CF911F910F91FF9019 +:100B5000EF90DF90CF90BF90AF909F908F907F905D +:100B60006F905F904F903F902F90089561E080E0EC +:100B700090EC0E94910E6AEAC401F701099560E0C9 +:100B800080E090EC0E94910E65E5C201F7010995A5 +:100B900061E080E090EC0E94910E60EAC401F701F0 +:100BA0000995632D80E090EC0E94910E622C712CCF +:100BB000A980BA80A628B728AC81BD811496ED9192 +:100BC000FC911597E60DF71D6081C501F7010995A8 +:100BD0000E944415C501F6010995282FC5012B83F4 +:100BE000F60109952B812813F3CFAC81BD811496B2 +:100BF0008D919C911597680E791EF30180812813C1 +:100C000007C023940F5F1F4F5198599A59988ACF64 +:100C1000519A599A87CF2F923F924F925F926F923B +:100C20007F928F929F92AF92BF92CF92DF92EF927C +:100C3000FF920F931F93CF93DF9300D000D01F92AA +:100C4000CDB7DEB7582E4A0119011D830C83D80198 +:100C500017964C90042D10E070E0F62FEE27FA83E3 +:100C6000E983AC81BD8116968C91169790E0801730 +:100C70009107D8F417964C9280E00F900F900F9048 +:100C80000F900F90DF91CF911F910F91FF90EF90F8 +:100C9000DF90CF90BF90AF909F908F907F906F909C +:100CA0005F904F903F902F90089540E060E180E08A +:100CB00090E80E94DF0F6AEAC401F701099565E533 +:100CC000C101F701099560EAC401F7010995A42C57 +:100CD000B12C69807A806A287B28AC81BD8114960A +:100CE000ED91FC911597EA0DFB1D6081C301F701A1 +:100CF000099541E060E180E090E80E94DF0F40E06C +:100D0000652D80E090EE0E94DF0F0E944415C30124 +:100D1000F6010995282FC3012B83F60109952B8134 +:100D20002813F3CFAC81BD8114968D919C911597BA +:100D3000A80EB91EF5018081281307C043940F5FE8 +:100D40001F4F5198599A59988CCF41E060E180E04B +:100D500090E80E94DF0F40E0652D80E090EE0E9459 +:100D6000DF0F519A599A7DCF3F924F925F926F92C7 +:100D70007F928F929F92AF92BF92CF92DF92EF922B +:100D8000FF920F931F93CF93DF93482E662E7A0125 +:100D9000E901DA0117965C90A52CB12C6AEA8AEA7F +:100DA0009AE8F901099565E585E595E8FE0109955B +:100DB00060E28AEA9AE8FE010995712C762C662495 +:100DC000D70116968C91169790E08A159B0520F511 +:100DD00017965C9260E980E090E8FE01099560E07A +:100DE00080E090E8FE01099560EF80E090E8FE0168 +:100DF000099580E0DF91CF911F910F91FF90EF90C7 +:100E0000DF90CF90BF90AF909F908F907F906F902A +:100E10005F904F903F90089564E580E090E50E94D8 +:100E2000910E852C912C6401C628D72860EAC60152 +:100E3000FE010995D7011496ED91FC911597E80DE7 +:100E4000F91D6081C601FE0109950E944415C60185 +:100E5000F8010995382EC601F80109953812F5CF29 +:100E6000D70114968D919C911597880E991EF401C7 +:100E70008081381208C05394FFEFAF1ABF0A51980F +:100E8000599A59989DCF61E880E090E50E94910EB3 +:100E9000642D80E090E80E94910E64E580E090E58A +:100EA0000E94910E519A599A8BCF4F925F926F92F6 +:100EB0007F928F929F92AF92BF92CF92DF92EF92EA +:100EC000FF920F931F93CF93DF93662E7A01E90170 +:100ED000DA0117965C90A52CB12C6AEA8AEA9AE8A6 +:100EE000F901099565E585E595E8FE01099560E25A +:100EF0008AEA9AE8FE010995712C762C6624D701BE +:100F000016968C91169790E08A159B0518F5179602 +:100F10005C9260E980E090E8FE01099560E080E085 +:100F200090E8FE01099560EF80E090E8FE010995E8 +:100F300080E0DF91CF911F910F91FF90EF90DF90B4 +:100F4000CF90BF90AF909F908F907F906F905F9069 +:100F50004F900895852C912C6401C628D72860EA0B +:100F6000C601FE010995D7011496ED91FC911597E4 +:100F7000E80DF91D6081C601FE0109950E94441526 +:100F8000C601F8010995482EC601F80109954812D5 +:100F9000F5CFD70114968D919C911597880E991EC7 +:100FA000F4018081481208C05394FFEFAF1ABF0AC2 +:100FB0005198599A5998A3CF519A599AA0CF4F92C4 +:100FC0005F926F927F928F929F92AF92BF92CF92D9 +:100FD000DF92EF92FF920F931F93CF93DF93EA017B +:100FE00069015F80A52CB12CE62EF12CFE2CEE249D +:100FF0008E8190E08A159B0598F45F8280E0DF91F6 +:10100000CF911F910F91FF90EF90DF90CF90BF9005 +:10101000AF909F908F907F906F905F904F900895CA +:101020006AEA85E595E1F601099565E58AEA9AE0BF +:10103000F601099560EA85E595E1F6010995652CCB +:10104000712C43018E289F28EC81FD81E60DF71D50 +:101050006081C401F60109950E944415C401F8019C +:101060000995482EC401F80109954812F5CF8C81E5 +:101070009D81680E791EF3018081481208C0539447 +:10108000FFEFAF1ABF0A5198599A5998B1CF519AA8 +:10109000599AAECF3F924F925F926F927F928F920A +:1010A0009F92AF92BF92CF92DF92EF92FF920F93F7 +:1010B0001F93CF93DF93EA0169015F80A52CB12CC8 +:1010C000482E429480EF4822E62EF12CFE2CEE248E +:1010D0008E8190E08A159B05A0F45F8280E0DF910D +:1010E000CF911F910F91FF90EF90DF90CF90BF9025 +:1010F000AF909F908F907F906F905F904F903F90B8 +:10110000089560E280E090E80E94910E6AEA85E529 +:1011100095E1F601099560E180E090E80E94910E6A +:1011200065E58AEA9AE0F601099560E280E090E8D8 +:101130000E94910E60EA85E595E1F6010995642D1E +:1011400080E090E80E94910E652C712C43018E285E +:101150009F28EC81FD81E60DF71D6081C401F60139 +:1011600009950E944415C401F8010995382EC4015F +:10117000F80109953812F5CF8C819D81680E791E92 +:10118000F3018081381208C05394FFEFAF1ABF0AF1 +:101190005198599A59989CCF519A599A99CF4F92F0 +:1011A0005F926F927F928F929F92AF92BF92CF92F7 +:1011B000DF92EF92FF920F931F93CF93DF93662EF0 +:1011C0007A01E901DA0117965C90A52CB12C6AEA44 +:1011D0008AEA9AE0F901099565E585E595E0FE0161 +:1011E000099560E28AEA9AE0FE010995712C762C55 +:1011F0006624D70116968C91169790E08A159B0568 +:1012000018F517965C9260E980E090E0FE01099580 +:1012100060E080E090E0FE01099560EF80E090E002 +:10122000FE01099580E0DF91CF911F910F91FF9012 +:10123000EF90DF90CF90BF90AF909F908F907F9076 +:101240006F905F904F900895852C912C6401C62873 +:10125000D72860EAC601FE010995D7011496ED91E1 +:10126000FC911597E80DF91D6081C601FE010995F5 +:101270000E944415C601F8010995482EC601F801DF +:1012800009954812F5CFD70114968D919C91159729 +:10129000880E991EF4018081481208C05394FFEF14 +:1012A000AF1ABF0A5198599A5998A3CF519A599A8F +:1012B000A0CF4F925F927F928F929F92AF92BF92F8 +:1012C000CF92DF92EF92FF920F931F93CF93DF9312 +:1012D000A62E6A01E901DA011796EC90F12CA89587 +:1012E00000000000000000000000000000000000FE +:1012F00000006AEA8AEA9AE8F901099565E585E558 +:1013000095E8FE01099560E28AEA9AE8FE010995EE +:10131000B12CBA2CAA24D60116968C91169790E07F +:101320008E159F0518F51796EC9260E980E090E81D +:10133000FE01099560E080E090E8FE01099560EF0C +:1013400080E090E8FE010995000080E0DF91CF91F8 +:101350001F910F91FF90EF90DF90CF90BF90AF90D3 +:101360009F908F907F905F904F90089580EA0E94A9 +:10137000A4132701552442018A289B28D6011496DC +:10138000ED91FC911597E40DF51D6081C401FE01FE +:1013900009950000000000000000000000000000AF +:1013A00000000000A8950E944415C401F8010995A9 +:1013B000782E000000000000000000000000000087 +:1013C00000000000D6011496ED91FC911597E40DF4 +:1013D000F51D80817816B9F00000000000000000C3 +:1013E00000000000000000000000C401F8010995A1 +:1013F00078120DC000000000000000000000000096 +:10140000000000000000FFEFEF1AFF0A84CF000089 +:1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC -:10144000589A0000000000000000000000000000AA -:101450000000C501F8010995BDCF519A599A50CFA6 -:101460008F929F92AF92BF92CF92DF92EF92FF92B4 -:101470000F931F93CF93DF93EC0188809980B82C52 -:101480008985823169F038F48031C1F0813109F405 -:101490001AC183EC06C0833109F44FC18431C9F706 -:1014A00080E0DF91CF911F910F91FF90EF90DF903F -:1014B000CF90BF90AF909F908F9008958D858111B0 -:1014C00011C0FAE7CF2EFEE0DF2EA0E5EA2EAEE057 -:1014D000FA2E8E012AEA3AE245E555E5682D606864 -:1014E0000E945E048D85813041F58881998166E096 -:1014F000969587956A95E1F7282F2F70A22E41E0E7 -:1015000060E180E090E80E94D60F40E06A2D80E024 -:1015100090EE0E94D60F7AE7C72E7EE0D72EECE839 -:10152000EE2EEEE0FE2E8E012AEA3AEA45E555ED72 -:10153000682D60688A2D0E94FE058D858330D1F468 -:10154000682D6F736068B62E8881998136E0969514 -:1015500087953A95E1F74AE7C42E4EE0D42E50E540 -:10156000E52E5EE0F52E8E012AEA3AE245E555E5E4 -:101570000E94BF048D858E31D1F46B2D6F7360682E -:10158000B62E8881998106E0969587950A95E1F7B0 -:101590009AE7C92E9EE0D92E2CE8E22E2EE0F22EFC -:1015A0008E012AEA3AEA45E555E90E945F058D85F4 -:1015B000823211F08B30F9F468817981660F672FE0 -:1015C000661F770B7195CB0199278C5691090E9464 -:1015D0008C0EBAE7CB2EBEE0DB2E10E5E12E1EE02E -:1015E000F12E8E012AEA3AE245E555E56B2D606859 -:1015F00080E00E945E048D858C3031F56B2D6F711B -:101600006068B62E8880998075E0969487947A9564 -:10161000E1F765EA80E090E60E948C0E682D8FEF7E -:101620009FEF0E948C0EEAE7CE2EEEE0DE2EFCE865 -:10163000EF2EFEE0FF2E8E012AEA3AEA45E555ED4F -:101640006B2D80E00E945E048D858C3101F58880D1 -:101650009980880C892C881C9908919461E880E015 -:1016600090E50E948C0E682D80E090E80E948C0E20 -:1016700064E580E090E50E948C0E0AE71EE02CE80D -:101680003EE0AE016B2D6068882D0E94A7068D8517 -:101690008F3109F005CF8880998054E09694879423 -:1016A0005A95E1F7682D80E090E50E948C0E6B2D35 -:1016B0006F7860680AE71EE02CE83EE0AE01882DF6 -:1016C0000E944807EDCE8D85811108C002EA1EE018 -:1016D00026EB3EE0AE01682D0E94D2078D858B304F -:1016E00091F4882D8F71B82E8881998145E0969567 -:1016F00087954A95E1F702EA1EE026EB3EE0AE014F -:101700006B2D0E943D088D858E3F09F0C9CE688102 -:10171000798135E0769567953A95E1F78FEF9FE30C -:101720000E94B60E6B2D6F710AEC1EE02CED3EE0B0 -:10173000AE0180E00E94C208B3CE8FEF84B9C4012D -:10174000880F892F881F990B919585B95F9A5F98AB -:1017500014B8682D60680FE413E126E633E1AE01AA -:1017600080E00E944C099CCE14B88FEF85B93F9A57 -:10177000479881B911B882B914B885B914B885B938 -:101780003898409A3998419A3A98429A3C98449AA3 -:101790003D98459A3E98469A53985B9A55985D9A1B -:1017A0003B98439A3F98479A57985F9A5098589811 -:1017B0005198599A08950E94B40B399A419A389ACF -:1017C00040983A9A429A3C9A449A3D9A459A14B85B -:1017D0008FEF85B914B885B914B885B93F9A479881 -:1017E00081B912B884B915B8479A479814B80895C2 -:1017F0000E94B40B399A419A3C9A449A3D9A459A70 -:10180000589A509A14B88FEF85B914B885B914B89E -:1018100085B93F9A479881B912B884B915B8479AE3 -:10182000479814B814B885B9579A5F9884B915B811 -:101830005F9A5F9814B80895823081F0833061F028 -:101840008130A1F40898109A1092B20380E290E0DF -:101850009093B1038093B00380E008955098589A14 -:1018600088E08093B20389E290E0F2CF87E908959F -:10187000813049F414B88FEF85B9579A5F980E9468 -:10188000B10C80E0089588E908955898509A0000B6 -:1018900089B15098589880FD22C05098589A59B1F3 -:1018A00049B1000039B10000000029B1000000007A -:1018B000000099B1000000000000000089B15098BC -:1018C000589850FD0EC040FD0EC030FD0EC020FDEA -:1018D0000EC090FD0EC080FD0EC080EE089580EF1A -:1018E000089580E0089581E0089583E0089586E0FA -:1018F00008958AE008958FE008950F931F93CF9382 -:10190000C82F842F8901C230F9F030F4CC2389F03C -:10191000C130B1F0C6E90FC0C430F1F0C0F0C0383A -:10192000C9F781E0F90180830E94450CF8018183A9 -:1019300009C00E94B40B8C2FCF911F910F91089575 -:101940000E94DB0BC0E0F7CF0E94F80BFBCFCF91DA -:101950001F910F910C941C0CCF911F910F910C941F -:10196000380C109210018FEF84B915B85F9A5F9808 -:1019700014B85098589A80E88093680310927603C0 -:10198000E7E7F3E0119283E0E739F807D9F7089524 -:1019900060917603813109F441C0109210019FEFEC -:1019A00094B99091100195B95F9A5F9814B820E0AE -:1019B00070E03FEF8032C9F4E72FF0E0E958FC4FC8 -:1019C000408150E0022E02C0559547950A94E2F7F7 -:1019D00040FF28C092E034B995B95F9A5F9814B877 -:1019E0002F5F283011F47F5F20E0492F446034B925 -:1019F00045B95F9A5F9814B8615034B995B95F9A48 -:101A00005F9814B86111D6CF9093100140932301D1 -:101A100034B915B85F9A5F9814B8089592E090931E -:101A20001001BDCF90E0D7CF0F931F93CF93DF93DB -:101A300050917603B0917703813109F46BC0109215 -:101A400010019FEF94B99091100195B95F9A5F983A -:101A500014B820E030E07FEFC1E0D0E0803281F4C4 -:101A6000EB2FF0E0022E02C0F595E7950A94E2F71D -:101A7000E0FF54C0916074B995B95F9A5F9814B84B -:101A80006032B1F4211105C0E32FF0E0E958FC4FBA -:101A90001082489B0DC0E32FF0E0E958FC4FA08175 -:101AA0008E01022E01C0000F0A94EAF7A02BA0833A -:101AB0005150442341F0511106C0926074B995B958 -:101AC0005F9A5F9814B8A92FA46074B9A5B95F9AFA -:101AD0005F9814B874B995B95F9A5F9814B82F5F7E -:101AE000283039F43F5FE32FF0E0E958FC4FB08134 -:101AF00020E05111B3CF90931001A09323018FEFF9 -:101B000084B915B85F9A5F9814B8DF91CF911F918F -:101B10000F91089591E09093100193CF9E7FABCFEA -:101B2000809168038338D1F580916903883009F486 -:101B300063C0C0F4833009F445C030F4813079F1DA -:101B40008230A1F18EEE28C0863009F44AC008F038 -:101B50004EC08430B9F781E88093680341E060E2C9 -:101B600081E136C08F30C1F148F48D3031F18E30D3 -:101B700049F781E88093680340E028C0803849F045 -:101B80008F3F49F08031F1F681E88093680340E0AF -:101B90002CC00C94B10C80EF80936803089581E809 -:101BA0008093680380E20E94C80C14C081E880938F -:101BB000680341E060E080E20BC081E88093680345 -:101BC00040E0F8CF81E88093680341E060E280E183 -:101BD0000E94140D82E8E0CF81E88093680340E022 -:101BE000BECF81E88093680341E060E2E4CF81E802 -:101BF0008093680380E1D7CF81E88093680381E117 -:101C0000D2CFCF93DF93E901843061F138F4823091 -:101C1000E1F008F58130A1F087E80FC0873039F195 -:101C200028F48530C9F74093760306C0883021F147 -:101C3000803891F70E94B10C80E0DF91CF91089538 -:101C40009091690399838883F7CF4093690383E870 -:101C500080936803F1CF4093690383E8809368031E -:101C60000E94900D80916803898381E0ECCF4093BE -:101C7000770350937803E0CF809177038983809135 -:101C800078038A83809179038B8380917A038C8394 -:101C900080917B038D8380917C038E8386E0D3CFFC -:101CA00082B98FEF84B995B9479A479814B884B927 -:101CB00065B9509A58985098589A14B80895509801 -:101CC00058984098419A429A82B92FEF24B995B911 -:101CD000479A479814B800000000409A97FD419831 -:101CE00000000000000000000000000083B14098E8 -:101CF000419A089582B92FEF24B995B9479A479828 -:101D000014B8409A97FD41980000000000000000C0 -:101D100083B14098419A08955098589882B92FEF0E -:101D200024B995B9479A479814B8429824B965B927 -:101D3000409A97FD4198000000004098419A429ACD -:101D400014B80895811520E2920708F4906882B9CA -:101D50008FEF84B995B9479A479814B84498000012 -:101D600000000000000083B1449A0895811520E22C -:101D7000920708F4906882B98FEF84B995B9479AB1 -:101D8000479814B884B965B9000045980000459A91 -:101D900014B8089582B98FEF84B995B9479A4798D6 -:101DA00014B8409A4198449800000000000083B1A4 -:101DB000449A4098419A089582B98FEF84B995B9B1 -:101DC000479A479814B84098419884B965B900007B -:101DD00045980000459A14B8419A089512B82FEF1B -:101DE00024B988E085B9479A479814B889B18072B8 -:101DF00090E024B924E025B9479A479814B829B14E -:101E0000207230E041E02115310509F040E061E049 -:101E1000009709F060E0442311F0611116C051E011 -:101E2000232B09F450E021E0892B09F420E055230D -:101E300011F021110CC0662311F051110AC0442386 -:101E400011F0211108C08FEF089580E1089581E11C -:101E5000089582E1089583E10895EF92FF920F9330 -:101E6000CF93DF9300D01F92CDB7DEB77C018FEF09 -:101E700084B965B9479A479814B8409A67FD419864 -:101E800042B9000080E0011117C00000000093B1CA -:101E9000F701E80FF11D90834F5F42B98F5F28175C -:101EA00090F74098419A0F900F900F90DF91CF914B -:101EB0000F91FF90EF9008952B834A8389830E94AE -:101EC000291589814A812B81E2CFEF92FF920F93EE -:101ED000CF93DF9300D01F92CDB7DEB77C01603285 -:101EE00008F460688FEF84B965B9479A479814B8C9 -:101EF000449842B9000080E0011116C000000000C3 -:101F000093B1F701E80FF11D90834F5F42B98F5FE6 -:101F1000281790F7449A0F900F900F90DF91CF9170 -:101F20000F91FF90EF9008952B834A8389830E943D -:101F3000291589814A812B81E3CFEF92FF920F937C -:101F4000CF93DF9300D01F92CDB7DEB77C018FEF28 -:101F500084B965B9479A479814B8409A419844980B -:101F600042B9000080E0011118C00000000093B1E8 -:101F7000F701E80FF11D90834F5F42B98F5F28177B -:101F800090F7449A4098419A0F900F900F90DF91EC -:101F9000CF910F91FF90EF9008952B834A8389830F -:101FA0000E94291589814A812B81E1CF0F931F93CC -:101FB000CF93DF938C01D62F442349F080E090E843 -:101FC0000E947A0E60E880E090E80E948C0EC5E0E6 -:101FD000C8010E947A0E6D2FC8010E948C0ED69502 -:101FE000C150B1F7DF91CF911F910F9108950F93D9 -:101FF0001F93CF93C82FCA018901C53079F148F4E6 -:10200000C13029F1E8F0C23031F1C43051F1C0EAF9 -:1020100019C0C23891F150F4C03839F1C138B9F75C -:1020200021E0F80120830E947A0E24C0C33859F1C0 -:10203000C43869F721E0F80120830E94CA0E1AC053 -:102040000E94500E8C2FCF911F910F9108950E94E6 -:10205000B60EC0E0F7CF0E948C0EFBCF0E94DC0EC4 -:10206000F8CF40E00E94D60FF4CF21E0F8012083A2 -:102070000E945F0EF8018183ECCF21E0F8012083FC -:102080000E94A20EF7CF81E0F90180830E94EE0E3C -:10209000F1CFCF93DF93FB01DC0112962C91222329 -:1020A00029F0203479F082ED808308C01082A0915D -:1020B0000201B0910301EC018C818C93CF01DF917F -:1020C000CF910895108281E08183A0910201B091A7 -:1020D00003018C918283F2CFE0910201F091030120 -:1020E00080830895E0910201F091030180810895B9 -:1020F0000F931F93D901082F10E00831110508F044 -:10210000C2C2F801EA57FF4E0C948717C0109E1008 -:10211000FB105611A211EE113A12E512EA12EF125B -:10212000F212F612F912011309130D1310131413FE -:102130001D1324132813301337133B134631510555 -:1021400008F0A3C2FA01E955FF4E0C948717BD10A1 -:10215000C310C710CB10CF10D310D710DB10DF1077 -:10216000E310E710EB10EF10F31045134513451380 -:102170004513451345134513F7103898409A80E0EE -:102180001F910F9108953998419A80E0F9CF3A98BC -:10219000429A80E0F5CF3B98439A80E0F1CF3C989B -:1021A000449A80E0EDCF3D98459A80E0E9CF3E9893 -:1021B000469A80E0E5CF3F98479A80E0E1CF50987B -:1021C000589A80E0DDCF5198599A80E0D9CF539842 -:1021D0005B9A80E0D5CF55985D9A80E0D1CF569834 -:1021E0005E9A80E0CDCF57985F9A80E0C9CF509833 -:1021F000589A80E0C5CF4631510508F048C2FA012F -:10220000EC5FFE4E0C9487171A111E112211261135 -:102210002A112E11321136113A113E114211461176 -:102220004A114E11471347134713471347134713D8 -:10223000471352113898409880E0A2CF39984198BE -:1022400080E09ECF3A98429880E09ACF3B9843989E -:1022500080E096CF3C98449880E092CF3D98459896 -:1022600080E08ECF3E98469880E08ACF3F9847988E -:1022700080E086CF5098589880E082CF5198599846 -:1022800080E07ECF53985B9880E07ACF55985D9838 -:1022900080E076CF56985E9880E072CF57985F982E -:1022A00080E06ECF5098589880E06ACF4631510553 -:1022B00008F0EFC1FA01E15AFE4E0C948717751130 -:1022C00078117B117E118111841187118A118D1172 -:1022D00090119311961199119C11491349134913A7 -:1022E00049134913491349139F11389A80E048CF85 -:1022F000399A80E045CF3A9A80E042CF3B9A80E01D -:102300003FCF3C9A80E03CCF3D9A80E039CF3E9A67 -:1023100080E036CF3F9A80E033CF509A80E030CFD4 -:10232000519A80E02DCF539A80E02ACF559A80E0D1 -:1023300027CF569A80E024CF579A80E021CF509A39 -:1023400080E01ECF4631510508F0A5C1FA01E555E0 -:10235000FE4E0C948717C111C411C711CA11CD11BB -:10236000D011D311D611D911DC11DF11E211E51111 -:10237000E8114B134B134B134B134B134B134B13D2 -:10238000EB11409880E0FCCE419880E0F9CE429875 -:1023900080E0F6CE439880E0F3CE449880E0F0CE23 -:1023A000459880E0EDCE469880E0EACE479880E000 -:1023B000E7CE589880E0E4CE599880E0E1CE5B9873 -:1023C00080E0DECE5D9880E0DBCE5E9880E0D8CE07 -:1023D0005F9880E0D5CE589880E0D2CE4631510546 -:1023E00008F05BC1FA01E950FE4E0C9487170D12FC -:1023F00010121312161219121C121F122212251279 -:1024000028122B122E12311234124D134D134D136C -:102410004D134D134D134D133712409A80E0B0CE3B -:10242000419A80E0ADCE429A80E0AACE439A80E005 -:10243000A7CE449A80E0A4CE459A80E0A1CE469AE9 -:1024400080E09ECE479A80E09BCE589A80E098CE5E -:10245000599A80E095CE5B9A80E092CE5D9A80E0BA -:102460008FCE5E9A80E08CCE5F9A80E089CE589ABB -:1024700080E086CE82E08C934631510508F0A2C000 -:10248000FA01EB5BFD4E0C9487175B1264126D1220 -:1024900076127F12881291129A12A312AC12B51200 -:1024A000BE12C712D012E212E212E212E212E212DD -:1024B000E212E212D91286B1817011968C931197B3 -:1024C00012961C9280E05CCE86B1827090E01296EB -:1024D0009C938E93119780E053CE86B1847090E0E8 -:1024E00012969C938E93119780E04ACE86B18870A5 -:1024F00090E012969C938E93119780E041CE86B126 -:10250000807190E012969C938E93119780E038CE64 -:1025100086B1807290E012969C938E93119780E022 -:102520002FCE86B1807490E012969C938E93119773 -:1025300080E026CE86B1807890E012969C938E93B0 -:10254000119780E01DCE89B1817011968C931197FF -:1025500012961C9280E014CE89B1827090E012969F -:102560009C938E93119780E00BCE89B1887090E098 -:1025700012969C938E93119780E002CE89B180725F -:1025800090E012969C938E93119780E0F9CD89B1DB -:10259000807490E012969C938E93119780E0F0CD1A -:1025A00089B1807890E012969C938E93119780E089 -:1025B000E7CD89B1817011968C93119712961C9278 -:1025C00080E0DECD1C928DE8DBCD14B88FEF85B9AD -:1025D00080E0D6CD14B88FEF85B980E0D1CD14B8A6 -:1025E00080E0CECD8FEF84B980E0CACD45B980E0E0 -:1025F000C7CD83B111968C93119781E08C9380E0C5 -:10260000BFCD14B88FEF85B93F9A479881B980E064 -:10261000B7CD8FEF82B980E0B3CD11B880E0B0CDF7 -:102620008FEF81B980E0ACCD42B98FEF84B955B955 -:10263000479A479814B880E0A3CD14B88FEF85B9B6 -:10264000579A5F9880E09CCD57985F9A80E098CD2C -:102650008FEF84B945B95F9A5F9814B880E090CD48 -:1026600014B88FEF85B9579A5F9880E089CD579855 -:102670005F9A80E085CD8FEF84B945B95F9A5F9806 -:1026800014B880E07DCD8CE87BCD8DE879CD8DE8E8 -:1026900077CD8DE875CD8DE873CD8DE871CD82B99C -:1026A0008FEF84B995B9479A479814B841984498E0 -:1026B000000000000000000000000000000000001A -:1026C0000000000083B1449A419A089582B98FEFC7 -:1026D00084B995B9479A479814B884B965B94598AB -:1026E00041980000000000000000459A419A14B88B -:1026F0000895CF93DF93952FE901813099F020F071 -:10270000823059F08AEA06C09FEF94B945B95F9AC2 -:102710005F9814B8DF91CF910895842F0E946613BB -:1027200080E0F8CF8883842F0E944F138983F8CFED -:102730009FEF94B985B945984198000000000000CA -:102740000000459A419A14B80895EF92FF920F93B2 -:10275000CF93DF9300D01F92CDB7DEB77C018FEF10 -:1027600084B965B9479A479814B84498419842B9D2 -:1027700080E0011119C0000000000000000093B1CA -:10278000F701E80FF11D90834F5F42B98F5F281763 -:1027900080F7449A419A0F900F900F90DF91CF915C -:1027A0000F91FF90EF9008952B834A8389830E94B5 -:1027B000291500000000000089814A812B81DFCFAC -:1027C000880F991F880F991F20E030E028173907DC -:1027D00009F40895000000002F5F3F4FF7CF20E07D -:1027E00030E02817390709F40895000000002F5F32 -:1027F0003F4FF7CFCF93DF9380E190E00E94E0134B -:10280000C4E0D0E084EF91E00E94E01384EF91E017 -:102810000E94E0132197B1F7C4E0D0E08AEF90E086 -:102820000E94E0138AEF90E00E94E0132197B1F735 -:10283000DF91CF91089580E190E00C94E013CF9365 -:10284000DF931F92CDB7DEB7F901813171F038F413 -:102850008130C1F078F08230C9F082E80FC0813257 -:10286000A9F0823299F08231C1F782E0808312822E -:1028700011820AC089830E94FA1389810F90DF9127 -:10288000CF9108950E941B1480E0F8CF81E08083EF -:102890001182FACF482F90E0982F882720E041112D -:1028A00003C021118068089520953FEF340F432322 -:1028B000F6CF80E090E0089580E0089560E070E059 -:1028C000CB010895CF93DF931F92CDB7DEB7DC0124 -:1028D0008FEF809307011092080187E091E09093B9 -:1028E000C2038093C10316968C9116978983119623 -:1028F000EC9111974E2F50E0FA013197E930F10534 -:1029000008F07DC0EA57FB4E0C9487178F149F1474 -:10291000AD14BB14E514FF14F614C914D71414969F -:102920004D915C91159728E031E013966C911397C7 -:1029300012968C910E9478108093070152C01496D1 -:102940004D915C91159728E031E013966C911397A7 -:1029500012968C910E947D0CEFCF14964D915C9154 -:10296000159728E031E013966C91139712968C918D -:102970000E94F70FE1CF14964D915C91159728E0D6 -:1029800031E013966C91139712968C910E947913F3 -:10299000D3CF14964D915C91159728E031E01396B2 -:1029A0006C91139712968C910E941F14C5CF1496A8 -:1029B0004D915C91159728E031E013966C91139737 -:1029C00012968C910E94010EB7CFAE014F5F5F4F00 -:1029D00067E071E0CD010E9479019093C20380937A -:1029E000C10389810F90DF91CF910895AE014F5FB0 -:1029F0005F4F67E071E0CD010E944910EECF80E8A3 -:102A00009BCFE0916503F091660327814481558156 -:102A1000322F360F231312C0E0916503F091660345 -:102A20008781860F878380913401861B80933401D0 -:102A300081110DC088E9838381E00895FC017191C3 -:102A4000CF01FA01E20FF11D70832F5FE3CF80E029 -:102A50000895CF93DF936091C303635067FD91C0E6 -:102A60008091C003CCE0D0E0C81BD109C953DC4F32 -:102A70008091BF038D3209F0CFC0683009F07FC06C -:102A800083EC8093B3038AE58093050110920F01D4 -:102A90008881807679F0CE010E9462148F3F09F41C -:102AA00066C09F81911169C09E81981708F065C02A -:102AB000892F63C02A811092BC03998191110AC0A9 -:102AC0001092BD032CEB33E082E03093C2032093DD -:102AD000C103E7CF953029F42093C4032CEB33E0F6 -:102AE000F4CF963099F59B81913059F48EE890E0BF -:102AF0009093C2038093C10382E190E490930F010D -:102B0000D0CF923019F48CE790E0F2CF9330A9F750 -:102B1000211108C088EE90E09093C2038093C10316 -:102B200084E0EBCF213041F48EEB90E09093C20330 -:102B30008093C1038AE2E1CF2230F9F680EA90E087 -:102B40009093C2038093C1038EE1D7CF983059F0A0 -:102B5000993019F42093C603C1CF81E09A3009F46B -:102B6000BDCF80E0BBCF26EC33E081E0AECF9881D3 -:102B700097FD8E8190E890930F018093040110924D -:102B8000C3038091050184FF3AC0809104018F3F07 -:102B9000B1F1C82F893008F0C8E08C1B8093040184 -:102BA0008091B30398E889278093B303CC23D1F0B5 -:102BB0008091C1039091C20320910F0126FF3FC075 -:102BC000A4EBB3E0FC012C2F34913D9331962150BE -:102BD000D9F701962FEF2C0F820F911D9093C2030E -:102BE0008093C1036C2F84EB93E00E944416CC5F6A -:102BF000CC3019F08FEF80930401C093050184E17C -:102C000099B1947131F48150D9F71092C4031092A4 -:102C1000BE03DF91CF91089580910F0187FFAFCF61 -:102C2000CE010E9401158F3F21F48EE180930501B2 -:102C3000A6CF882309F4A3CF10920401A0CFE4EB20 -:102C4000F3E0DC012C2F3D9131932150E1F7C1CF0E -:102C5000E9E6F0E0808182608083E89A0895A82FF9 -:102C6000B92F80E090E041E050EA609530E009C083 -:102C70002D9182279795879510F084279527305EB0 -:102C8000C8F36F5FA8F30895EADF8D939D930895CD -:102C9000CF93CFB7CF93DF93C3954C9BE9F74C9B72 -:102CA0000BC04C9B09C04C9B07C04C9B05C04C9B68 -:102CB00003C04C9B01C089C06F93C091C003DD2746 -:102CC000C953DC4F2F9365E54C9B03C02F916F9147 -:102CD000E6CF0F931F934F9320E040E15F9309B13C -:102CE000047104FB27F93F9350E03BE039C01471B5 -:102CF00040642F77012F5F5F1EC0406819B11471C7 -:102D00002F7752501FC0406409B12F770471D1F161 -:102D10005F5F00C023C0406219B12F77147191F139 -:102D20005F5F00C025C004711027515012F45D5F31 -:102D30000000115027952C3F19B1C8F614710127D6 -:102D4000015027952C3FC8F64227499309B10471D9 -:102D500010274F73115027952C3FA8F6469546959E -:102D600019B1147179F00127015027952C3F98F67D -:102D70006B5A60F3315009B1B0F600C011E01CBBD2 -:102D8000002717C03B503195C31BD04011E01CBB3E -:102D90000881033CF9F00B34E9F02091BE0319815E -:102DA000110F1213EDCF093651F10D3211F0013E22 -:102DB00039F70093C5033F915F914F911F910F9198 -:102DC0002F916F91CCB3C0FD67CFDF91CF91CFBF73 -:102DD000CF9118952091C503222369F31091C30365 -:102DE000112339F534303AF13093C3032093BF03F4 -:102DF0001091C0033BE0311B3093C0031CC0009115 -:102E0000C3030130B4F40AE53091050134FD14C068 -:102E100000930501C3EBD3E013C0052710E000C009 -:102E200000000BB91AC0052710E0221F1DC010E0DA -:102E300021C04AE502C032ED432FC4E1D0E032E0C8 -:102E40001AB114615C9A0BB11AB954E120E865E338 -:102E500020FF05270BB9279517951C3FF0F66695BF -:102E6000B8F7B1F720FF05270BB9279517951C3F39 -:102E7000D0F62795179517FF052700001C3F0BB9C3 -:102E8000B0F629913A9519F70B7E1091C403110FF2 -:102E9000C651D0400BB911F01093BE0311E01CBB1A -:102EA00000611AB11B7E402F4B7E54E05A95F1F71A -:102EB0000BB91AB94BB97FCF9EE088E10FB6F894F1 -:102EC000A895809360000FBE909360000E94281622 -:102ED000549A80E0815099F4549878940E94B40BED -:102EE00080EF80936803A8950E9429150E94A8028C -:102EF00080916803803FB9F30E94900DF4CFA895AC -:102F0000EFE9FFE03197F1F700C00000E3CFEE0FEB -:0E2F1000FF1F0590F491E02D0994F894FFCF77 -:062F1E0065019703FF5A54 +:1014400000000000000000000000C401F801099540 +:10145000782ECBCF8F929F92AF92BF92CF92DF9296 +:10146000EF92FF920F931F93CF93DF93EC0188804D +:101470009980B82C8985823169F038F48031C1F0C7 +:10148000813109F41AC183EC06C0833109F44FC1DC +:101490008431C9F780E0DF91CF911F910F91FF90C8 +:1014A000EF90DF90CF90BF90AF909F908F90089576 +:1014B0008D85811111C0EFE7CE2EEEE0DE2EF5E531 +:1014C000EF2EFEE0FF2E8E012AEA3AE245E555E5D1 +:1014D000682D60680E946B048D85813041F588819C +:1014E000998156E0969587955A95E1F7282F2F70A8 +:1014F000A22E41E060E180E090E80E94DF0F40E032 +:101500006A2D80E090EE0E94DF0F6FE7C62E6EE03E +:10151000D62E71E9E72E7EE0F72E8E012AEA3AEA0E +:1015200045E555ED682D60688A2D0E940B068D8576 +:101530008330D1F4682D6F736068B62E88819981ED +:1015400026E0969587952A95E1F73FE7C32E3EE082 +:10155000D32E45E5E42E4EE0F42E8E012AEA3AE23F +:1015600045E555E50E94CC048D858E31D1F46B2D77 +:101570006F736068B62E88819981B6E096958795DD +:10158000BA95E1F71FE7C12E1EE0D12E01E9E02E4A +:101590000EE0F02E8E012AEA3AEA45E555E90E946E +:1015A0006C058D85823211F08B30F9F46881798178 +:1015B000660F672F661F770B7195CB0199278C56A5 +:1015C00091090E94910EFFE7CF2EFEE0DF2EA5E5E8 +:1015D000EA2EAEE0FA2E8E012AEA3AE245E555E51A +:1015E0006B2D606880E00E946B048D858C3031F536 +:1015F0006B2D6F716068B62E8880998055E0969447 +:1016000087945A95E1F765EA80E090E60E94910E92 +:10161000682D8FEF9FEF0E94910E6FE7C62E6EE050 +:10162000D62E71E9E72E7EE0F72E8E012AEA3AEAFD +:1016300045E555ED6B2D80E00E946B048D858C3166 +:1016400001F588809980880C892C881C99089194D0 +:1016500061E880E090E50E94910E682D80E090E8BE +:101660000E94910E64E580E090E50E94910E0FE7E4 +:101670001EE021E93EE0AE016B2D6068882D0E94DE +:10168000B4068D858F3109F005CF8880998034E0CC +:10169000969487943A95E1F7682D80E090E50E9452 +:1016A000910E6B2D6F7860680FE71EE021E93EE038 +:1016B000AE01882D0E945507EDCE8D85811108C0A1 +:1016C00007EA1EE02BEB3EE0AE01682D0E94DF072B +:1016D0008D858B3091F4882D8F71B82E88819981FA +:1016E00025E0969587952A95E1F707EA1EE02BEB12 +:1016F0003EE0AE016B2D0E944A088D858E3F09F0B9 +:10170000C9CE6881798195E0769567959A95E1F7DC +:101710008FEF9FE30E94BB0E6B2D6F710FEC1EE0ED +:1017200021EE3EE0AE0180E00E94CF08B3CE8D8571 +:10173000811119C0282D2068B22E880C892C881C94 +:1017400099089194682D8FEF84B965B95F9A5F9875 +:1017500014B808E513E122E733E1AE016B2D80E018 +:101760000E94590997CE813071F7692D6F736064BB +:10177000EACF14B88FEF85B93F9A479881B911B86D +:1017800082B914B885B914B885B93898409A39988F +:10179000419A3A98429A3C98449A3D98459A3E9884 +:1017A000469A53985B9A55985D9A3B98439A3F980E +:1017B000479A57985F9A509858985198599A08950F +:1017C0000E94B90B399A419A389A40983A9A429AAB +:1017D0003C9A449A3D9A459A14B88FEF85B914B84B +:1017E00085B914B885B93F9A479881B912B884B9B8 +:1017F00015B8479A479814B808950E94B90B399ABA +:10180000419A3C9A449A3D9A459A589A509A14B8EB +:101810008FEF85B914B885B914B885B93F9A479840 +:1018200081B912B884B915B8479A479814B814B852 +:1018300085B9579A5F9884B915B85F9A5F9814B8BC +:101840000895823081F0833061F08130A1F40898EE +:10185000109A1092B60380E290E09093B5038093C3 +:10186000B40380E008955098589A88E08093B603B6 +:1018700089E290E0F2CF87E90895813049F414B805 +:101880008FEF85B9579A5F980E94B60C80E0089553 +:1018900088E908955898509A000089B1509858984E +:1018A00080FD22C05098589A59B149B1000039B111 +:1018B0000000000029B100000000000099B1000004 +:1018C00000000000000089B15098589850FD0EC0EB +:1018D00040FD0EC030FD0EC020FD0EC090FD0EC0BC +:1018E00080FD0EC080EE089580EF089580E0089599 +:1018F00081E0089583E0089586E008958AE00895E0 +:101900008FE008950F931F93CF93C82F842F8901E1 +:10191000C230F9F030F4CC2389F0C130B1F0C6E91F +:101920000FC0C430F1F0C0F0C038C9F781E0F90150 +:1019300080830E944A0CF801818309C00E94B90B80 +:101940008C2FCF911F910F9108950E94E00BC0E062 +:10195000F7CF0E94FD0BFBCFCF911F910F910C94FD +:10196000210CCF911F910F910C943D0C10921401FA +:101970008FEF84B915B85F9A5F9814B85098589A49 +:1019800080E880936C0310927A03EBE7F3E0119206 +:1019900083E0EB39F807D9F7089560917A03813134 +:1019A00009F441C0109214019FEF94B99091140171 +:1019B00095B95F9A5F9814B820E070E03FEF8032ED +:1019C000C9F4E72FF0E0E558FC4F408150E0022ECB +:1019D00002C0559547950A94E2F740FF28C092E06F +:1019E00034B995B95F9A5F9814B82F5F283011F415 +:1019F0007F5F20E0492F446034B945B95F9A5F9812 +:101A000014B8615034B995B95F9A5F9814B86111F0 +:101A1000D6CF909314014093270134B915B85F9A3B +:101A20005F9814B8089592E090931401BDCF90E0B0 +:101A3000D7CF0F931F93CF93DF9350917A03B09139 +:101A40007B03813109F46BC0109214019FEF94B9AC +:101A50009091140195B95F9A5F9814B820E030E036 +:101A60007FEFC1E0D0E0803281F4EB2FF0E0022E76 +:101A700002C0F595E7950A94E2F7E0FF54C0916043 +:101A800074B995B95F9A5F9814B86032B1F42111B6 +:101A900005C0E32FF0E0E558FC4F1082489B0DC0D5 +:101AA000E32FF0E0E558FC4FA0818E01022E01C02B +:101AB000000F0A94EAF7A02BA0835150442341F071 +:101AC000511106C0926074B995B95F9A5F9814B8C5 +:101AD000A92FA46074B9A5B95F9A5F9814B874B9B6 +:101AE00095B95F9A5F9814B82F5F283039F43F5F3B +:101AF000E32FF0E0E558FC4FB08120E05111B3CF67 +:101B000090931401A09327018FEF84B915B85F9AC1 +:101B10005F9814B8DF91CF911F910F91089591E0D4 +:101B20009093140193CF9E7FABCF80916C03833849 +:101B3000D1F580916D03883009F463C0C0F483301F +:101B400009F445C030F4813079F18230A1F18EEE94 +:101B500028C0863009F44AC008F04EC08430B9F776 +:101B600081E880936C0341E060E281E136C08F3010 +:101B7000C1F148F48D3031F18E3049F781E880931E +:101B80006C0340E028C0803849F08F3F49F0803135 +:101B9000F1F681E880936C0340E02CC00C94B60C05 +:101BA00080EF80936C03089581E880936C0380E25A +:101BB0000E94CD0C14C081E880936C0341E060E08A +:101BC00080E20BC081E880936C0340E0F8CF81E8AD +:101BD00080936C0341E060E280E10E94190D82E88D +:101BE000E0CF81E880936C0340E0BECF81E8809332 +:101BF0006C0341E060E2E4CF81E880936C0380E114 +:101C0000D7CF81E880936C0381E1D2CFCF93DF936C +:101C1000E901843061F138F48230E1F008F5813077 +:101C2000A1F087E80FC0873039F128F48530C9F773 +:101C300040937A0306C0883021F1803891F70E94E2 +:101C4000B60C80E0DF91CF91089590916D03998358 +:101C50008883F7CF40936D0383E880936C03F1CFC3 +:101C600040936D0383E880936C030E94950D8091EF +:101C70006C03898381E0ECCF40937B0350937C031A +:101C8000E0CF80917B03898380917C038A8380915C +:101C90007D038B8380917E038C8380917F038D8372 +:101CA000809180038E8386E0D3CF82B98FEF84B991 +:101CB00095B9479A479814B884B965B9509A589815 +:101CC0005098589A14B80895509858984098419A46 +:101CD000429A82B92FEF24B995B9479A479814B818 +:101CE00000000000409A97FD4198000000000000AD +:101CF00000000000000083B14098419A089582B925 +:101D00002FEF24B995B9479A479814B8409A97FD90 +:101D10004198000000000000000083B14098419A03 +:101D200008955098589882B92FEF24B995B9479AD9 +:101D3000479814B8429824B965B9409A97FD4198DC +:101D4000000000004098419A429A14B80895811505 +:101D500020E2920708F4906882B98FEF84B995B9B0 +:101D6000479A479814B8449800000000000000000B +:101D700083B1449A0895811520E2920708F490688F +:101D800082B98FEF84B995B9479A479814B884B946 +:101D900065B9000045980000459A14B8089582B9C5 +:101DA0008FEF84B995B9479A479814B8409A4198EB +:101DB000449800000000000083B1449A4098419A82 +:101DC000089582B98FEF84B995B9479A479814B8A6 +:101DD0004098419884B965B9000045980000459A3B +:101DE00014B8419A089512B82FEF24B988E085B944 +:101DF000479A479814B889B1807290E024B924E0DA +:101E000025B9479A479814B829B1207230E041E0CB +:101E10002115310509F040E061E0009709F060E02C +:101E2000442311F0611116C051E0232B09F450E056 +:101E300021E0892B09F420E0552311F021110CC079 +:101E4000662311F051110AC0442311F0211108C07A +:101E50008FEF089580E1089581E1089582E108956A +:101E600083E10895EF92FF920F93CF93DF9300D019 +:101E70001F92CDB7DEB77C018FEF84B965B9479A61 +:101E8000479814B8409A67FD419842B9000080E035 +:101E9000011119C0000000000000000093B1F7011B +:101EA000E80FF11D90834F5F42B98F5F281780F7CD +:101EB0004098419A0F900F900F90DF91CF910F9122 +:101EC000FF90EF9008952B834A8389830E944415E5 +:101ED0000000000089814A812B81E0CFEF92FF92C0 +:101EE0000F93CF93DF9300D01F92CDB7DEB77C0165 +:101EF000603208F460688FEF84B965B9479A4798F3 +:101F000014B8449842B9000080E0011116C00000E6 +:101F1000000093B1F701E80FF11D90834F5F42B9C4 +:101F20008F5F281790F7449A0F900F900F90DF91D2 +:101F3000CF910F91FF90EF9008952B834A8389836F +:101F40000E94441589814A812B81E3CFEF92FF9251 +:101F50000F93CF93DF9300D01F92CDB7DEB77C01F4 +:101F60008FEF84B965B9479A479814B8409A419859 +:101F7000449842B9000080E0011118C00000000040 +:101F800093B1F701E80FF11D90834F5F42B98F5F66 +:101F9000281790F7449A4098419A0F900F900F900D +:101FA000DF91CF910F91FF90EF9008952B834A839B +:101FB00089830E94441589814A812B81E1CF0F9347 +:101FC0001F93CF93DF938C01D62F442349F080E0F9 +:101FD00090E80E947F0E60E880E090E80E94910EF9 +:101FE000C5E0C8010E947F0E6D2FC8010E94910EAE +:101FF000D695C150B1F7DF91CF911F910F91089500 +:102000000F931F93CF93C82FCA018901C53079F16F +:1020100048F4C13029F1E8F0C23031F1C43051F157 +:10202000C0EA19C0C23891F150F4C03839F1C13852 +:10203000B9F721E0F80120830E947F0E24C0C33845 +:1020400059F1C43869F721E0F80120830E94CF0ECE +:102050001AC00E94550E8C2FCF911F910F91089599 +:102060000E94BB0EC0E0F7CF0E94910EFBCF0E94F2 +:10207000E10EF8CF40E00E94DF0FF4CF21E0F8013D +:1020800020830E94640EF8018183ECCF21E0F801E7 +:1020900020830E94A70EF7CF81E0F90180830E9480 +:1020A000F30EF1CFCF93DF93FB01DC0112962C915D +:1020B000222329F0203479F082ED808308C0108239 +:1020C000A0910201B0910301EC018C818C93CF01AE +:1020D000DF91CF910895108281E08183A091020168 +:1020E000B09103018C918283F2CFE0910201F091D3 +:1020F000030180830895E0910201F0910301808142 +:1021000008950F931F93D901082F10E0083111058E +:1021100008F0C2C2F801E157FF4E0C94A217C91093 +:10212000A71004115F11AB11F7114312EE12F31255 +:10213000F812FB12FF1202130A13121316131913CB +:102140001D1326132D133113391340134413463135 +:10215000510508F0A3C2FA01E055FF4E0C94A217F6 +:10216000C610CC10D010D410D810DC10E010E41041 +:10217000E810EC10F010F410F810FC104E134E1391 +:102180004E134E134E134E134E1300113898409AAF +:1021900080E01F910F9108953998419A80E0F9CF1E +:1021A0003A98429A80E0F5CF3B98439A80E0F1CF8D +:1021B0003C98449A80E0EDCF3D98459A80E0E9CF85 +:1021C0003E98469A80E0E5CF3F98479A80E0E1CF7D +:1021D0005098589A80E0DDCF5198599A80E0D9CF35 +:1021E00053985B9A80E0D5CF55985D9A80E0D1CF27 +:1021F00056985E9A80E0CDCF57985F9A80E0C9CF1D +:102200005098589A80E0C5CF4631510508F048C231 +:10221000FA01E35FFE4E0C94A217231127112B1134 +:102220002F11331137113B113F11431147114B113E +:102230004F11531157115013501350135013501383 +:10224000501350135B113898409880E0A2CF399812 +:10225000419880E09ECF3A98429880E09ACF3B9890 +:10226000439880E096CF3C98449880E092CF3D9888 +:10227000459880E08ECF3E98469880E08ACF3F9880 +:10228000479880E086CF5098589880E082CF519848 +:10229000599880E07ECF53985B9880E07ACF55982C +:1022A0005D9880E076CF56985E9880E072CF579820 +:1022B0005F9880E06ECF5098589880E06ACF4631A2 +:1022C000510508F0EFC1FA01E859FE4E0C94A2172F +:1022D0007E118111841187118A118D119011931132 +:1022E000961199119C119F11A211A511521352130D +:1022F00052135213521352135213A811389A80E0FA +:1023000048CF399A80E045CF3A9A80E042CF3B9A55 +:1023100080E03FCF3C9A80E03CCF3D9A80E039CFCF +:102320003E9A80E036CF3F9A80E033CF509A80E0EB +:1023300030CF519A80E02DCF539A80E02ACF559A22 +:1023400080E027CF569A80E024CF579A80E021CFB3 +:10235000509A80E01ECF4631510508F0A5C1FA0120 +:10236000EC54FE4E0C94A217CA11CD11D011D3110A +:10237000D611D911DC11DF11E211E511E811EB11D1 +:10238000EE11F111541354135413541354135413E2 +:102390005413F411409880E0FCCE419880E0F9CECF +:1023A000429880E0F6CE439880E0F3CE449880E0F7 +:1023B000F0CE459880E0EDCE469880E0EACE479892 +:1023C00080E0E7CE589880E0E4CE599880E0E1CEF6 +:1023D0005B9880E0DECE5D9880E0DBCE5E9880E0AA +:1023E000D8CE5F9880E0D5CE589880E0D2CE4631E6 +:1023F000510508F05BC1FA01E050FE4E0C94A217A3 +:10240000161219121C121F122212251228122B1238 +:102410002E123112341237123A123D12561356133D +:10242000561356135613561356134012409A80E013 +:10243000B0CE419A80E0ADCE429A80E0AACE439AD7 +:1024400080E0A7CE449A80E0A4CE459A80E0A1CE59 +:10245000469A80E09ECE479A80E09BCE589A80E0D4 +:1024600098CE599A80E095CE5B9A80E092CE5D9AA4 +:1024700080E08FCE5E9A80E08CCE5F9A80E089CE3D +:10248000589A80E086CE82E08C934631510508F060 +:10249000A2C0FA01E25BFD4E0C94A21764126D1209 +:1024A00076127F12881291129A12A312AC12B512F0 +:1024B000BE12C712D012D912EB12EB12EB12EB12B2 +:1024C000EB12EB12EB12E21286B1817011968C9333 +:1024D000119712961C9280E05CCE86B1827090E0DB +:1024E00012969C938E93119780E053CE86B18470A0 +:1024F00090E012969C938E93119780E04ACE86B11D +:10250000887090E012969C938E93119780E041CE54 +:1025100086B1807190E012969C938E93119780E023 +:1025200038CE86B1807290E012969C938E9311976C +:1025300080E02FCE86B1807490E012969C938E93AB +:10254000119780E026CE86B1807890E012969C9319 +:102550008E93119780E01DCE89B1817011968C9376 +:10256000119712961C9280E014CE89B1827090E08F +:1025700012969C938E93119780E00BCE89B1887050 +:1025800090E012969C938E93119780E002CE89B1D1 +:10259000807290E012969C938E93119780E0F9CD13 +:1025A00089B1807490E012969C938E93119780E08D +:1025B000F0CD89B1807890E012969C938E9311971C +:1025C00080E0E7CD89B1817011968C9311971296B6 +:1025D0001C9280E0DECD1C928DE8DBCD14B88FEF2D +:1025E00085B980E0D6CD14B88FEF85B980E0D1CD24 +:1025F00014B880E0CECD8FEF84B980E0CACD45B964 +:1026000080E0C7CD83B111968C93119781E08C93B4 +:1026100080E0BFCD14B88FEF85B93F9A479881B954 +:1026200080E0B7CD8FEF82B980E0B3CD11B880E004 +:10263000B0CD8FEF81B980E0ACCD42B98FEF84B9D6 +:1026400055B9479A479814B880E0A3CD14B88FEFD6 +:1026500085B9579A5F9880E09CCD57985F9A80E043 +:1026600098CD8FEF84B945B95F9A5F9814B880E030 +:1026700090CD14B88FEF85B9579A5F9880E089CDD7 +:1026800057985F9A80E085CD8FEF84B945B95F9AFE +:102690005F9814B880E07DCD8CE87BCD8DE879CD56 +:1026A0008DE877CD8DE875CD8DE873CD8DE871CD52 +:1026B00082B98FEF84B995B9479A479814B8419871 +:1026C000449800000000000000000000000000002E +:1026D00000000000000000000000000083B1449AE8 +:1026E000419A089582B98FEF84B995B9479A47986E +:1026F00014B884B965B945984198000000000000FD +:102700000000459A419A14B80895CF93DF93952F0E +:10271000E901813099F020F0823059F08AEA06C050 +:102720009FEF94B945B95F9A5F9814B8DF91CF9144 +:102730000895842F0E94721380E0F8CF8883842F3D +:102740000E9458138983F8CF9FEF94B985B94598B3 +:1027500041980000000000000000459A419A14B81A +:102760000895EF92FF920F93CF93DF9300D01F92C3 +:10277000CDB7DEB77C018FEF84B965B9479A47982A +:1027800014B84498419842B980E0011119C0000082 +:1027900000000000000093B1F701E80FF11D9083E5 +:1027A0004F5F42B98F5F281780F7449A419A0F9084 +:1027B0000F900F90DF91CF910F91FF90EF900895C0 +:1027C0002B834A8389830E94441500000000000087 +:1027D00089814A812B81DFCF880F991F880F991F2C +:1027E00020E030E02817390709F4089500000000C0 +:1027F0002F5F3F4FF7CF20E030E02817390709F46B +:102800000895000000002F5F3F4FF7CFCF93DF9375 +:1028100080E190E00E94EC13C4E0D0E084EF91E00E +:102820000E94EC1384EF91E00E94EC132197B1F722 +:10283000C4E0D0E08AEF90E00E94EC138AEF90E0D1 +:102840000E94EC132197B1F7DF91CF91089580E1B9 +:1028500090E00C94EC13CF93DF931F92CDB7DEB7CB +:10286000F901813171F038F48130C1F078F08230B3 +:10287000C9F082E80FC08132A9F0823299F082312A +:10288000C1F782E08083128211820AC089830E948C +:10289000061489810F90DF91CF9108950E9427142B +:1028A00080E0F8CF81E080831182FACF482F90E05A +:1028B000982F882720E0411103C0211180680895D6 +:1028C00020953FEF340F4323F6CF80E090E008954A +:1028D00080E0089560E070E0CB010895CF93DF932E +:1028E0001F92CDB7DEB7DC018FEF80930701109206 +:1028F000080187E091E09093C6038093C503169684 +:102900008C91169789831196EC9111974E2F50E078 +:10291000FA013197EA30F10508F08CC0EE56FB4E13 +:102920000C94A2179C14AC14BA14C81400151A15F0 +:102930001115D614E414F21414964D915C91159768 +:1029400028E031E013966C91139712968C910E94B7 +:1029500081108093070160C014964D915C9115978A +:1029600028E031E013966C91139712968C910E9497 +:10297000820CEFCF14964D915C91159728E031E0D1 +:1029800013966C91139712968C910E940010E1CFD0 +:1029900014964D915C91159728E031E013966C9157 +:1029A000139712968C910E948513D3CF14964D9154 +:1029B0005C91159728E031E013966C91139712966D +:1029C0008C910E942B14C5CF14964D915C91159754 +:1029D00028E031E013966C91139712968C910E9427 +:1029E000060EB7CF14964D915C91159728E031E013 +:1029F00013966C91139712968C910E949500A9CF13 +:102A0000AE014F5F5F4F67E071E0CD010E947C0136 +:102A10009093C6038093C50389810F90DF91CF9176 +:102A20000895AE014F5F5F4F67E071E0CD010E94F6 +:102A30005210EECF80E88DCFE0916903F0916A03E8 +:102A4000278144815581322F360F231312C0E09124 +:102A50006903F0916A038781860F8783809138012B +:102A6000861B8093380181110DC088E9838381E042 +:102A70000895FC017191CF01FA01E20FF11D7083FD +:102A80002F5FE3CF80E00895CF93DF936091C7037A +:102A9000635067FD91C08091C403CCE0D0E0C81BB7 +:102AA000D109C553DC4F8091C3038D3209F0CFC0EB +:102AB000683009F07FC083EC8093B7038AE5809388 +:102AC000050110920F018881807679F0CE010E9475 +:102AD0006E148F3F09F466C09F81911169C09E8179 +:102AE000981708F065C0892F63C02A811092C0032F +:102AF000998191110AC01092C10320EC33E082E069 +:102B00003093C6032093C503E7CF953029F4209373 +:102B1000C80320EC33E0F4CF963099F59B819130D7 +:102B200059F48EE890E09093C6038093C50382E148 +:102B300090E490930F01D0CF923019F48CE790E09D +:102B4000F2CF9330A9F7211108C088EE90E090935E +:102B5000C6038093C50384E0EBCF213041F48EEBB4 +:102B600090E09093C6038093C5038AE2E1CF2230C0 +:102B7000F9F680EA90E09093C6038093C5038EE156 +:102B8000D7CF983059F0993019F42093CA03C1CFA8 +:102B900081E09A3009F4BDCF80E0BBCF2AEC33E06E +:102BA00081E0AECF988197FD8E8190E890930F01E0 +:102BB000809304011092C7038091050184FF3AC0FD +:102BC000809104018F3FB1F1C82F893008F0C8E02F +:102BD0008C1B809304018091B70398E88927809328 +:102BE000B703CC23D1F08091C5039091C603209107 +:102BF0000F0126FF3FC0A8EBB3E0FC012C2F34915E +:102C00003D9331962150D9F701962FEF2C0F820F6B +:102C1000911D9093C6038093C5036C2F88EB93E0BE +:102C20000E945F16CC5FCC3019F08FEF80930401C7 +:102C3000C093050184E199B1947131F48150D9F7C1 +:102C40001092C8031092C203DF91CF910895809132 +:102C50000F0187FFAFCFCE010E941C158F3F21F4DB +:102C60008EE180930501A6CF882309F4A3CF1092AB +:102C70000401A0CFE8EBF3E0DC012C2F3D91319370 +:102C80002150E1F7C1CFE9E6F0E0808182608083E6 +:102C9000E89A0895A82FB92F80E090E041E050EA2B +:102CA000609530E009C02D9182279795879510F0A7 +:102CB00084279527305EC8F36F5FA8F30895EADF95 +:102CC0008D939D930895CF93CFB7CF93DF93C39503 +:102CD0004C9BE9F74C9B0BC04C9B09C04C9B07C01D +:102CE0004C9B05C04C9B03C04C9B01C089C06F939B +:102CF000C091C403DD27C553DC4F2F9365E54C9B82 +:102D000003C02F916F91E6CF0F931F934F9320E055 +:102D100040E15F9309B1047104FB27F93F9350E050 +:102D20003BE039C0147140642F77012F5F5F1EC0F4 +:102D3000406819B114712F7752501FC0406409B117 +:102D40002F770471D1F15F5F00C023C0406219B1D9 +:102D50002F77147191F15F5F00C025C004711027B7 +:102D6000515012F45D5F0000115027952C3F19B1AE +:102D7000C8F614710127015027952C3FC8F6422749 +:102D8000499309B1047110274F73115027952C3FB7 +:102D9000A8F64695469519B1147179F001270150AE +:102DA00027952C3F98F66B5A60F3315009B1B0F675 +:102DB00000C011E01CBB002717C03B503195C31B5E +:102DC000D04011E01CBB0881033CF9F00B34E9F062 +:102DD0002091C2031981110F1213EDCF093651F161 +:102DE0000D3211F0013E39F70093C9033F915F9115 +:102DF0004F911F910F912F916F91CCB3C0FD67CF71 +:102E0000DF91CF91CFBFCF9118952091C903222395 +:102E100069F31091C703112339F534303AF1309337 +:102E2000C7032093C3031091C4033BE0311B3093CD +:102E3000C4031CC00091C7030130B4F40AE530910B +:102E4000050134FD14C000930501C7EBD3E013C0A6 +:102E5000052710E000C000000BB91AC0052710E0DC +:102E6000221F1DC010E021C04AE502C032ED432FF1 +:102E7000C4E1D0E032E01AB114615C9A0BB11AB926 +:102E800054E120E865E320FF05270BB92795179546 +:102E90001C3FF0F66695B8F7B1F720FF05270BB990 +:102EA000279517951C3FD0F62795179517FF0527EF +:102EB00000001C3F0BB9B0F629913A9519F70B7E2B +:102EC0001091C803110FC651D0400BB911F01093E7 +:102ED000C20311E01CBB00611AB11B7E402F4B7E68 +:102EE00054E05A95F1F70BB91AB94BB97FCF9EE070 +:102EF00088E10FB6F894A895809360000FBE909378 +:102F000060000E944316549A80E0815099F45498CE +:102F100078940E94B90B80EF80936C03A8950E946F +:102F200044150E94AB0280916C03803FB9F30E946C +:102F3000950DF4CFA895EFE9FFE03197F1F700C0C8 +:102F40000000E3CFEE0FFF1F0590F491E02D0994F0 +:042F5000F894FFCF23 +:062F540069019B03FF5A16 :00000001FF diff --git a/firmware/build_stm/inlretro_stm.bin b/firmware/build_stm/inlretro_stm.bin index 061a677..d5958ca 100644 Binary files a/firmware/build_stm/inlretro_stm.bin and b/firmware/build_stm/inlretro_stm.bin differ diff --git a/firmware/build_stm/inlretro_stm.elf b/firmware/build_stm/inlretro_stm.elf index 0af0f16..cd8ae81 100644 Binary files a/firmware/build_stm/inlretro_stm.elf and b/firmware/build_stm/inlretro_stm.elf differ diff --git a/firmware/build_stm/inlretro_stm.hex b/firmware/build_stm/inlretro_stm.hex index 31341ac..bacf041 100644 --- a/firmware/build_stm/inlretro_stm.hex +++ b/firmware/build_stm/inlretro_stm.hex @@ -1,5 +1,5 @@ :020000040800F2 -:1000000000180020C1000008FD000008C92E0008EB +:1000000000180020C1000008FD000008592F00085A :1000100000000000000000000000000000000000E0 :10002000000000000000000000000000FD000008CB :100030000000000000000000FD000008FD000008B6 @@ -13,1154 +13,1154 @@ :1000B000FD000008FD000008FD0000080101000827 :1000C00009490A4A0A4B9B1A03DD043BC858D05021 :1000D000FBDC0849084A0020521A02DD043A885025 -:1000E000FCDC01F0F7FE00002C47000800000020B7 -:1000F00030040020300400202C070020FEE7C0461A -:10010000F0B5C94A89B0138801921BB2002B01DBFC -:1001100001F0D6FB1388C54A1A4080231343019A85 -:100120001380019B1A8880231B011340C04A01D110 -:1001300001F094FBBF49C04C0B68C04801330B6011 -:1001400023787F211D008D43BD49BE4E0D70E1888F -:10015000018000203080602633401370BA4A2600A8 -:100160001570834247D0FF23B84CCAB22370B84BF6 -:1001700060701C60029270780138082801D901F083 -:100180001BFB04F0E9F909003B06DC077B08C40906 -:10019000190B040BA6087D09B078B3888C221928A6 -:1001A00024D88022D20004F0D7F91A00560080012A -:1001B00060023F03C8035B04170533053F0547058D -:1001C0004F05580561056F0577057F0587058C0587 -:1001D000A005B605D705EC05030610033303B023CD -:1001E0009C4A5B0351690B435361002222706A46AB -:1001F000994B12891A803378602259B2002901DBA9 -:1002000001F0FDFA134016D17278062A0FD17288D8 -:10021000110A022901D101F0D1FA032901D101F01B -:10022000D3FA8E4A012901D101F0C9FA03936A4633 -:10023000894B92891A80019B1A88894B1343894AFA -:100240001A40C0239B015340019A9BB2138002F0D5 -:10025000DDFD01F0F5FA152B01D900F0C0FD180005 -:100260008023DB0004F078F9160023002E00BB0584 -:10027000390044004F00BB055C006900730080003A -:10028000BB05BB058D009A00A500B200BF00CC00E5 -:10029000D60016019022D205136873490B401360F3 -:1002A0008023D1685B030B43D36000229EE790213B -:1002B0000123C9050A689A430A60CA681343CB60E0 -:1002C000002293E790210423C9050A689A430A6033 -:1002D000CA681343CB60002288E790211023C90528 -:1002E0000A689A430A60CA681343CB6000227DE71C -:1002F00090214023C9050A689A430A60CA681343DB -:10030000CB60002272E79022D205136857490B4058 -:1003100013608023D168DB040B43D360002265E7C0 -:100320009022D205136852490B4013608023D16894 -:100330005B010B43D360002258E704234D490A6850 -:100340009A430A60CA681343CB6000224EE79022AA -:10035000D205136848490B4013608023D168DB0540 -:100360000B43D360002241E79022D2051368434932 -:100370000B4013608023D168DB020B43D360002263 -:1003800034E79022D20513683D490B401360802367 -:10039000D1685B000B43D360002227E79022D2058F -:1003A0001168384801401160D1680B43D3600022C6 -:1003B0001CE79022D205136833490B401360802359 -:1003C000D168DB010B43D36000220FE79022D205F6 -:1003D000136826490B4013608023D168DB040B436C -:1003E000D360002202E79022D205136827490B4010 -:1003F00013608023D1685B050B43D3600022F5E6D0 -:1004000001231C490A689A430A60CA681343CB60F7 -:100410000022EBE610231E490A689A430A60CA6864 -:100420001343CB600022E1E6005C00408F0F000028 -:10043000EE0600208C04002048600040920400205A -:10044000EC06002096040020ED060020F0060020B7 -:100450002007002000100240940400208645000878 -:100460008081FFFF8FBFFFFFFFFFEFFFFFFFFFFB5D -:10047000FFEFFFFF00040048FFFFFFBFFFFFFBFF90 -:10048000FFFEFFFFFFFBFFFFFFBFFFFFFFFFFFEFD1 -:10049000000C00489021C9050A68D24802400A6051 -:1004A000CA681343CB600022A0E6152B01D900F0E7 -:1004B00099FC180004F050F8160021002C00960456 -:1004C000370042004D009604580063006D0078002C -:1004D0009604960483008E009900A400AF00BA0031 -:1004E000C400CE009023DB051968BF4801401960A5 -:1004F000DA680240DA60002278E690230121DB0509 -:100500001A688A431A60DA688A43DA6000226DE664 -:1005100090230421DB051A688A431A60DA688A434B -:10052000DA60002262E690231021DB051A688A4314 -:100530001A60DA688A43DA60002257E69023402185 -:10054000DB051A688A431A60DA688A43DA60002297 -:100550004CE69023DB051968A44801401960DA686D -:100560000240DA60002241E69023DB051968A048CA -:1005700001401960DA680240DA60002236E60421A0 -:100580009C4B1A688A431A60DA688A43DA60002250 -:100590002CE69023DB051968974801401960DA685A -:1005A0000240DA60002221E69023DB0519689348B7 -:1005B00001401960DA680240DA60002216E69023F2 -:1005C000DB0519688E4801401960DA680240DA607C -:1005D00000220BE69023DB05196882480140196070 -:1005E000DA680240DA60002200E69023DB05196831 -:1005F000844801401960DA680240DA600022F5E5BB -:100600009023DB051968794801401960DA680240D7 -:10061000DA600022EAE59023DB0519687A48014098 -:100620001960DA680240DA600022DFE50121714BCF -:100630001A688A431A60DA688A43DA600022D5E5CC -:100640001021724B1A688A431A60DA688A43DA60AA -:100650000022CBE59023DB05196862480140196050 -:10066000DA680240DA600022C0E5152B00D9BCE34D -:10067000180003F071FF16001F002700BA032F00B7 -:1006800037003F00BA034800510058006100BA0328 -:10069000BA036A0073007A0083008C0095009C0006 -:1006A000A30090228023D20511685B030B431360E3 -:1006B00000229BE590220123D20511680B431360B1 -:1006C000002293E590220423D20511680B431360A6 -:1006D00000228BE590221023D20511680B43136092 -:1006E000002283E590224023D20511680B4313605A -:1006F00000227BE590228023D2051168DB040B43A6 -:100700001360002272E590228023D20511685B01FC -:100710000B431360002269E50423364A11680B433A -:100720001360002262E590228023D2051168DB0568 -:100730000B431360002259E590228023D2051168F3 -:10074000DB020B431360002250E590228023D20588 -:1007500011685B000B431360002247E59021C90537 -:100760000B681A430A60002240E590228023D205DC -:100770001168DB010B431360002237E590228023D0 -:10078000D2051168DB040B43136000222EE5902292 -:100790008023D20511685B050B431360002225E519 -:1007A0000123144A11680B43136000221EE5102335 -:1007B000164A11680B431360002217E59021C90502 -:1007C0000B681A430A60002210E58D22082B00D026 -:1007D0000CE59022D205516838330B435360002258 -:1007E00004E5C046FFFBFFFFFFFFEFFFFFFFFFFB3E -:1007F000FFEFFFFF00040048FFFFFFBFFFFFFBFF0D -:10080000FFFEFFFFFFBFFFFFFFFFFFEF000C0048F1 -:100810008D22082B00D0E9E490224021D2055368B4 -:100820008B4353600022E1E4152B00D9E0E218006D -:1008300003F092FE16001B002100DE0227002D00AF -:100840003300DE023A00400045004C00DE02DE02CA -:10085000530059005F0065006C00730078007D0054 -:100860009023DB059A620022C0E490230122DB057D -:100870009A620022BAE490230222DB059A620022E7 -:10088000B4E490230422DB059A620022AEE49023B4 -:100890000822DB059A620022A8E4802290239201BC -:1008A000DB059A620022A1E490234022DB059A62D4 -:1008B00000229BE40222D14B9A62002296E480221D -:1008C00090231202DB059A6200228FE4802290239B -:1008D0009200DB059A62002288E490231022DB0557 -:1008E0009A62002282E490232022DB059A62002291 -:1008F0007CE490238022DB059A62002276E4802249 -:1009000090239201DB059A6200226FE480229023FB -:10091000D201DB059A62002268E40122B74B9A6299 -:10092000002263E40422B64B9A6200225EE4902324 -:100930002022DB059A62002258E4152B00D95AE2E6 -:10094000180003F009FE16001B00210058022700C2 -:100950002D00330058023A00400045004D00580277 -:10096000580255005C0063006A0072007A00800043 -:1009700086009023DB059A61002237E49023012250 -:10098000DB059A61002231E490230222DB059A61A3 -:1009900000222BE490230422DB059A61002225E447 -:1009A00090230822DB059A6100221FE48022902315 -:1009B0009201DB059A61002218E490234022DB05B6 -:1009C0009A61002212E402228C4B9A6100220DE40B -:1009D000802290231202DB059A610022FFF706FCB9 -:1009E000802290239200DB059A610022FFF7FEFB34 -:1009F00090231022DB059A610022FFF7F7FB90237A -:100A00002022DB059A610022FFF7F0FB9023802271 -:100A1000DB059A610022FFF7E9FB80229023920117 -:100A2000DB059A610022FFF7E1FB80229023D201CF -:100A3000DB059A610022FFF7D9FB01226F4B9A6117 -:100A40000022FFF7D3FB04226D4B9A610022FFF7CF -:100A5000CDFB90232022DB059A610022FFF7C6FB25 -:100A600002226270152B00D9B1E0180003F060FD7E -:100A70000B151EAF273039AF434C545DAFAF6770D5 -:100A800079828C969EA690238022DB051B69D2007A -:100A9000134063800022FFF7A9FB90230122DB05AE -:100AA0001B69134063800022FFF7A0FB9023022202 -:100AB000DB051B69134063800022FFF797FB90233F -:100AC0000422DB051B69134063800022FFF78EFBC5 -:100AD00090230822DB051B69134063800022FFF787 -:100AE00085FB90238022DB051B6992011340638004 -:100AF0000022FFF77BFB90234022DB051B6913409C -:100B000063800022FFF772FB02223C4B1B691340FB -:100B100063800022FFF76AFB9023DB051B6900223C -:100B2000DB0BDB036380FFF761FB90238022DB0597 -:100B30001B699200134063800022FFF757FB90234C -:100B40001022DB051B69134063800022FFF74EFB78 -:100B500090232022DB051B69134063800022FFF7EE -:100B600045FB90238022DB051B6913406380002234 -:100B7000FFF73CFB90238022DB051B6992011340A9 -:100B800063800022FFF732FB90238022DB051B6984 -:100B9000D201134063800022FFF728FB0122174B8C -:100BA0001B69134063800022FFF720FB0422144BD3 -:100BB0001B69134063800022FFF718FB902320225B -:100BC000DB051B69134063800022FFF70FFB002346 -:100BD0008D226370FFF70AFB80230A4ADB0251690A -:100BE0000B435361054A084913680B401360D168F1 -:100BF000064B0B43D3600022FFF7F8FA00040048CD -:100C0000000C004800100240FFFFAAAA0000555542 -:100C1000D34AD44913680B401360D168D24B0B43BD -:100C2000D3600022FFF7E2FACD4ACE4913680B40A9 -:100C300013600022FFF7DAFAC94ACB4B11680B4365 -:100C400013600022FFF7D2FAC5491B024A69D2B2EB -:100C500013434B610022FFF7C9FAC14B00221B6905 -:100C60001B0AA37001236370FFF7C0FA8023BF4AF9 -:100C70001B0351690B435361BD4ABE4B11680B43C3 -:100C800013600022FFF7B2FAB94ABA4BD1680B439E -:100C9000D3600022FFF7AAFAB54AB74913680B40A0 -:100CA00013600022FFF7A2FAB14AB24B11680B435E -:100CB00013600022FFF79AFAAD4A53610022FFF752 -:100CC00095FA8023A94A1B0351690B435361A44A37 -:100CD000AA4B11680B4313609022D2051168A84BF0 -:100CE0000B4313600022FFF781FA9D4AA34BD168A2 -:100CF0000B43D3609023DB05D868A1490143D96039 -:100D00001168A048014011601A689F490A401A60A2 -:100D10000022FFF76BFAF8228027914D980269694B -:100D2000D20110403F025A023A4089051043890D12 -:100D300008439021686110205D08C90528404A6970 -:100D4000924DDB012A4002438020C001034013433F -:100D50004B610022FFF74AFAC023844ADB02516943 -:100D60000B4353617E4A8A4B11680B4313609022F8 -:100D7000A023D20511685B030B4313600022FFF729 -:100D800035FA774A824BD1680B43D3609023A02178 -:100D9000DB05D86849030143D96011687D480140EB -:100DA00011601A687C490A401A600022FFF71EFA97 -:100DB000FF216B489D0042692940784DDB002A40A5 -:100DC0000A4342619022C020D205C000516903400D -:100DD000734801400B4353610022FFF707FA8D224D -:100DE000FFF704FA8D22FFF701FA8D22FFF7FEF9D3 -:100DF0008D22FFF7FBF98D22FFF7F8F9B578B3885C -:100E0000022D00D1D2E005D8002D60D0012D64D094 -:100E100096255EE0042D00D15DE100D219E1802D20 -:100E2000F6D19023012740218025DB056770996268 -:100E30001A686D012A431A60C0465A481C691A682C -:100E40000C4002401A60DA680240DA60F022002C9E -:100E50003AD11A6802401A60DA681543DD601A69EF -:100E600094461A690A400492C0461A690592C0461F -:100E7000C0461A690692C046C046C0461A69079223 -:100E8000C046C046C046C0461D691A6802401A6086 -:100E9000DA681040D860634622000B4214D1049BEC -:100EA0003A00002B10D1059B02320B420CD1069B5D -:100EB00003320B4208D10B0007990432194203D1C7 -:100EC00005321D4200D1D132374B9A7001E100F05A -:100ED0005DFF354B1D70FFF78AF900F057FF902337 -:100EE000DB051A681F4C2A431A6080229D6119682D -:100EF00052030A431A6080220421D2009A621A68BF -:100F000000250A431A6002229A6118680E320243D1 -:100F10001A604022996119680A431A6008229A618E -:100F200080231249DB024A6913434B610C4B1A6858 -:100F300022401A60D8680C4A1043D86018682040D4 -:100F40001860D8680243DA6080234A691B031343A0 -:100F50004B61074B074A19680A431A605D61B8E79D -:100F600000040048FFFFAAAA0000555500100240E7 -:100F70000008004855555555AAAAAAAA0000505580 -:100F800000010010FFFFAFAAFFFEFFEFEFBF000060 -:100F900050550000AFAAFFFFFFFFEBFF03FF00006B -:100FA000FFF90000FFEFFFFFF006002000F0EEFE6B -:100FB00090230121DB051A68CE4D0A431A601022E6 -:100FC000996119680A431A60042240219A611A68DB -:100FD0000A431A6008229A618022996119685201B5 -:100FE0000A431A608022C449D202486902434A6116 -:100FF000C24A106828401060D468C1480443D460D5 -:1010000014682C401460D4682043D06080204C6960 -:10101000000320434861BB48BB4C05682C430025B6 -:1010200004604561C0204C69C002204348611068DB -:10103000B64901431160A0211868490301431960B2 -:10104000B3485169014051615A69B2490A405A6135 -:101050003FE7DBB2022B1ED00025032B00D138E77F -:10106000012B6AD18022A4491203486902434A61D4 -:10107000A44A116899431160D1681943D16051683D -:1010800019435160936111680B431360A24B1D70AB -:10109000A24B1A601DE7B023974A5B0351694020B9 -:1010A0000B4353619023DB051A689D490A401A607F -:1010B0008022D96852011143D960596801435960AF -:1010C000986119680A4308211A60934A1170934A7B -:1010D00013600025FDE6DBB29825012B00D0F8E671 -:1010E000902106220A208F4BC90519608E4B1A7079 -:1010F000824B8E4A13608E4A10708E4A0130136004 -:101100008D4A10708D4A013013608D4A1070802016 -:10111000794A00035469204350611C688948204380 -:1011200018600868884B03430B60B02351695B0368 -:101130000B43536100F04EFDCBE79725C9E6B57828 -:10114000F178B088052D2CD009D8012D22D0002DA2 -:101150001BD0022D22D0042D26D0A02517E0822DF1 -:1011600052D009D8802D23D0812DF6D10123637070 -:1011700001F000FEA0700FE0832D4AD0842DECD149 -:101180000123637001F0E8FFF4E701F013FE25701E -:10119000FFF72DF801F0FCFF0025F8E701F0B4FDA2 -:1011A000FAE701F0B1FFF7E7002201F091FFF3E762 -:1011B000012290236270DB051968594D294019609E -:1011C000D9682940D96080210225C90099629A61B5 -:1011D0009D614C4D6861C046C04600B299610028CF -:1011E00000DA9A62C046C046C046C046C046C04605 -:1011F00090228021414BD205C9001B6991620121D7 -:101200001B0A9161A370C7E70123637001F0E8FF37 -:10121000B0E701238022902080216370394B1201B6 -:101220005A61C00502695D69C900EDB2294359617F -:1012300092B20369802110009BB2184389001025E7 -:10124000084219D00B4018000A40411E8841110085 -:101250004D1EA941C0B2C9B2002802D011250029F3 -:101260000AD1002A02D11225002805D1002B02D173 -:101270001325002900D1FF25A5708DE7B378B0882C -:10128000012B21D0002B03D0022B18D0AA2313E06E -:10129000FF221A4D870069693A401D4FC00039404E -:1012A0000A436A619021C025C905ED004A690540DD -:1012B000184802402A434A612370FEF798FFF178EC -:1012C00001F0C0FE0023F7E7637001F0E1FEA070BB -:1012D000F8E7B578F278B188112D00D1C9E035D89A -:1012E000012D00D198E0002D3CD0022D00D1A9E0C5 -:1012F00082254CE7FFFFAAAA001002400004004824 -:1013000000005555000800485555555550550000EA -:1013100003FF0000FFF90000FC060020F806002093 -:10132000FFEFFFFF10070020140700200807002030 -:101330000C070020180700201C07002000070020D1 -:10134000040700200000505500010010212D00D19D -:1013500085E0222D00D188E0122DC9D10223102072 -:10136000637089E001252900C44AC54F12783B68A3 -:10137000914099625A6810208A435A6001F056FEE3 -:101380002900BE4B3A681B78042799400B009161F5 -:10139000516804950B435360FA20400001F046FE6B -:1013A000B64A04991278FA209140B54D40002B6856 -:1013B000013F99625A68BFB28A435A6001F036FE13 -:1013C000AE4B04991B782A6899400B0091615168D3 -:1013D0000B435360002FDFD10425FA2001F026FED5 -:1013E0000121A64AA64F12783B68914099625A683B -:1013F000FA208A435A6001F019FE01219F4B3A6896 -:101400001B78013D99400B0091615168ADB20B43CF -:101410005360002DE1D1BAE62900984A984F12781E -:101420003B68914099625A6810208A435A6001F0E3 -:10143000FDFD924A3B68127895409D615A681543BC -:101440005D60A9E601238D4A637012788D4993404F -:101450008B4A9BB21268002001F082FF8AE60123CA -:101460000020637001F032FD84E6012310206370D8 -:10147000F8E702230020637001F082FD60808BE6B4 -:10148000B378B288042B1AD006D8022B1CD021D8EE -:10149000012B0FD087230FE7072B24D003D8052B70 -:1014A000F8D1794B14E0082B22D0802BF2D100F038 -:1014B00091FB07E7754A1278A270637002E7744BDC -:1014C0001B78A3700123F8E7704B1A708322704BCE -:1014D0001A70F7E66D4B6E4D1A7083232B7000F077 -:1014E000E9FB2B78EDE76B4B1A70120A5A70E9E6AC -:1014F000684B1A78A2705A78E2709A782271DA787A -:1015000062711A79A2715B79E3710623D5E7B2782B -:101510001300303B2F2B19D8F078032800D9EEE0C8 -:1015200003F006F8140210125B4B512A00D177E049 -:1015300024D8312A53D00BD8002A33D0302A49D0AE -:10154000B42345E0554BF0E7554BEEE7554BECE740 -:10155000332A4ED048D3502AF2D1002222700632CC -:1015600062701A7AA270DA78E2705A7A22719A7AE4 -:1015700062719A78A2715B7CE37145E07F2A00D9A1 -:10158000A3E0702A5CD2602A36D0612A40D0522A69 -:10159000D6D100221B882270A37002321B0A62700F -:1015A000E37031E0FF23404953540132102AFBD14C -:1015B000394A3C49D3709370394ACB70D3709370D9 -:1015C00001228B703549CB708B70384B1A70002319 -:1015D000237019E0B288110AD9721A73F7E7B2883A -:1015E000110A59739A73F2E7B288110AD9731A74FF -:1015F000EDE7B2885A74EAE7002323700133637081 -:10160000B388294AD35CA370294B1C60FEF7EFFD19 -:101610000023237001336370264B1B68DB78F2E7ED -:101620000022227006326270DA7AA2701A7BE270AF -:101630005A7B22719A7B6271DA7BA2711B7C9BE7D9 -:10164000184B1C495C6833787F2B00D956E16846FB -:10165000194B007A18700868C378002B2ED0002030 -:101660000290982B05D151E100200290D02B00D19F -:101670004CE10E4B10301870FF2324E0FC060020D4 -:10168000F806002004000200D9040020B80400205D -:10169000DA040020B904002044040020580400208B -:1016A0006C04002030040020DB040020980400209B -:1016B0002007002080040020880400209F4B186031 -:1016C0009023C3706F33029320E10720104003285A -:1016D00015D802F02DFF16021812994B802A93D3C9 -:1016E000872A12D97032D2B2072A8DD800222270EE -:1016F000F2789A72B2881A8086E7924BEEE7B523A9 -:1017000066E7914BEAE7914BE8E7B188F0780A0A7F -:10171000C9B245189446BE22102D2DDC0432002893 -:101720002AD0DD78033AFF2D26D19D780132FF2D96 -:1017300022D10022D5B2A84220D862464501013DFF -:101740001D724D012F009A700022814DDA70ED1943 -:101750005A729A721A80DA721A735A739A73DA7317 -:101760001A745A745D607B4B591863468B5401326E -:10177000D3B29842F9D80022227045E701328D1881 -:10178000744F013D7D5DFF2DD4D0C122F4E7B278C6 -:10179000002A04D0402A07D0D222227035E72270D6 -:1017A000B1886D4A117030E70022227001326270F8 -:1017B000694A1278A27028E780237DE5674A684B62 -:1017C0001A601223FEF732FDD2B2012A11D0002A8C -:1017D00009D0022A01D0FEF729FD614B614A1A6047 -:1017E000614BFEF723FD5E4B604A1A600423FEF74F -:1017F0001DFD5B4B5E4A1A605E4BFEF717FD134200 -:1018000008D17378052B05D173885B4A13705B4A46 -:10181000DBB21380019B5A4A1B8801991340594A35 -:1018200013439BB20B800021574B1980019B1B88EF -:101830001A43564B1A40564B5A40019B92B21A809B -:10184000544BDA8F520507D58021534A118000226C -:10185000DA87524B019A138009B0F0BD1278402A02 -:10186000EED14F4A1278002AEAD14E4A1088334A04 -:10187000C0B211684D7A4E68DAB25419E4B290429F -:1018800018D84A7A82184A72474A13781B1ADBB270 -:101890001370002B01D19833CB70019B1A88394B00 -:1018A0001343424A1A40C0239B015340019A9BB202 -:1018B0001380C5E73E4A9A18127801333255DBE7A8 -:1018C000019B1B881B06BBD5019B3A4A1B88134012 -:1018D000802212021343019A1380374B1B78802B0E -:1018E00001D1FEF7B4FC244A1378002BA8D0802144 -:1018F0000B4329490B8000231370A1E70868C378C4 -:10190000D82B00D0B0E680234468C3700B68002158 -:101910005972DB78902B00D076E6712A00D073E6FE -:10192000064BB2881B6859680A70B2885968120A57 -:101930004A705A7A02325A7266E6C046840400201F -:10194000440400206C0400203004002058040020CF -:10195000EC040020DB0400209804002074450008FB -:1019600020070020F04500081E03000098450008ED -:101970009C4500082A0300009004002050600040AD -:101980008F8EFFFF8080FFFF02600040BFBFFFFF20 -:1019900030300000065C00404C5C0040203200000B -:1019A000ED06002006600040880400208FBFFFFF86 -:1019B000486000400F8FFFFFEC060020F0B5404B61 -:1019C0008BB0089119783F4B09921B7801900293D4 -:1019D0003D4B019D1C683D4B3D481A7801231E007C -:1019E00096403C4AA662102D5ED112780068934062 -:1019F000836201200200364B05901F68354B1B782F -:101A00009A4003920200344B1B680693334B1B78B9 -:101A10009A4093B202000793314B1B689C46314BAE -:101A20001B789A40002304921A000198202806D1BE -:101A3000029D05981D4105423ED00398B861089863 -:101A400020280FD1002B01D11E4883540698056928 -:101A50000798054206D01B48855C059898400543C9 -:101A60001848855409980139C9B2002802D00029C4 -:101A700000D1A6616046049D0133DBB285618562B9 -:101A8000082B05D101320F4BD2B29B5C029300238D -:101A90000029CAD10E4B1A680E4B197801238B40CE -:101AA0009362A6620BB0F0BD019D112DA1D11278F9 -:101AB0000068934083619CE70398B862BFE7C04623 -:101AC000D9040020B9040020180700201C070020BA -:101AD000080700200C070020100700201407002032 -:101AE0000007002004070020F7B51F4B1F491A7894 -:101AF0001F4B10282ED101241E780D68B440AC6213 -:101B0000012635000C6831001B7801969D40194B69 -:101B10001B680093184B1B78994000238C461900D2 -:101B200020280DD1154E019F765C1E413E4219D0F2 -:101B3000A5610133DBB2082B02D100230131C9B208 -:101B40006646009F013AD2B2BE61BE62002AE7D16A -:101B5000A562F7BD1128D3D101241E780D68B440C9 -:101B6000AC61CDE7A562E4E7D904002018070020A6 -:101B70001C0700200007002004070020B9040020F3 -:101B8000022907D10F4B104A984218D0904209D130 -:101B9000180007E0032906D10A4B0B490B4A98426B -:101BA0000BD1080070470429FCD1064B064A984225 -:101BB00005D006499042F4D0054A8842E6D110008B -:101BC000F0E7C04630040020440400205804002000 -:101BD0006C040020F0B52C4B85B019682B4B2C48B9 -:101BE0001B7800780193012302901E0018001F004B -:101BF000019A029C9640A040264D274A2D781268F3 -:101C0000AF408E628446906224489D40006887629F -:101C1000046803941C00AC402500039C2543056028 -:101C20004568019CBD4345609C401D00A540086877 -:101C30001C00284308604868B04348601068029957 -:101C400099408C40210001436046116051688143F6 -:101C5000134851600078134A984083401268124834 -:101C6000116899431160D1680B43D36080220F4BF8 -:101C70001A70002319000E4A13701A1801331170DC -:101C8000202BFAD105B0F0BD180700201C0700205A -:101C90000C07002004070020080700200007002090 -:101CA0001407002010070020B9040020DA040020E7 -:101CB000D904002010B5334B1B78082B5DD016D803 -:101CC000314C032B44D007D8012B2DD0022B31D01F -:101CD000EE222D4B1A7023E0062B44D049D8042B5A -:101CE000F6D18123012223702021112027E00F2B20 -:101CF00034D008D8244C0D2B25D00E2BE8D18123CD -:101D00000022237027E0802B08D01F4CFF2B08D027 -:101D1000102BDDD181230022237027E0FFF75AFF2B -:101D200010BDF0232370FBE7812320202370FFF7F1 -:101D3000DBFE06E081230122002123702020FFF733 -:101D40003DFE8223EEE78123002223701100F5E798 -:101D500081230122237020211020F0E781230A4CE7 -:101D600000222370C0E78123012223702021080074 -:101D7000E5E7812310202370D9E78123024C11204D -:101D80002370D4E7B8040020DA040020BC22444BBE -:101D9000D203996A70B50A439A629A6A4149424CE1 -:101DA0000A409A628022596912030A435A613F4AE3 -:101DB0003F4910683F4E084310601068204080245F -:101DC0001060D068E4020143D1605A6922435A612D -:101DD000394A116831401160D56838490D43D560E2 -:101DE000106830401060D0680143D160B02158695C -:101DF0004903014359619023DB05196830480140CC -:101E000019608021D868490301430120D96019680D -:101E100081431960D9680143D96004211D688D434D -:101E20001D60DD680D43DD6010251E68AE431E6039 -:101E3000DE683543DD6040251E68AE431E60DE6807 -:101E40003543DD601D681F4E35401D608025DE680E -:101E5000ED043543DD601D681B4E35401D60802557 -:101E6000DE68ED053543DD601D68184E35401D60A8 -:101E7000DD682C43DC601468154D84431460D4681D -:101E80002043D0601C682C401C60D8682840D86073 -:101E900013688B431360D3681943D16070BDC0468B -:101EA00000100240FFFFA1FFAAAAAAAA000800484A -:101EB00055555555FFFFAAAA000400480000555586 -:101EC000FFFFEFFFFFFFFFFBFFFFFFBFFFFFFBFF7A -:101ED000FFEFFFFF9022DA4B12031968F0B50A43B7 -:101EE0001A60802289B0920219681142FCD0012246 -:101EF00059680A435A608022596852020A435A605C -:101F00008022596852030A435A6080221968520499 -:101F10000A431A608022920419681142FCD01121F0 -:101F20000220C84A11605A680E398A4302435A6037 -:101F30001A6B7D310A431A638022DC691204224342 -:101F4000DA6162B6C04B4025DA8FC04C8243DA8733 -:101F5000DA8F01388243DA870022BD48C2872280A7 -:101F6000BC4C2580BC4C083525808025BB4C6D01C0 -:101F70002580BB4C2180C287BA49BB4A1180802191 -:101F8000BA4A090611608022D98FD2000A43DA8743 -:101F9000B74AB84B1A80FFF7F9FEF022B64B1A7019 -:101FA000B64E2023327811009943D2292ED1B4495C -:101FB000B448C978C3780224FF2904D1FF3B1C0030 -:101FC000631E9C41E4B2B04BDB78FF2B00D00324AE -:101FD000AE4BDB78FF2B00D00424AD4BAD4F1C7013 -:101FE0003860D22A12D10023012505E02100FFF735 -:101FF000C7FD01230135EDB2A542F7D3002B00D078 -:10200000386080223B68DA70D02333703378F22B4B -:1020100005D10022023B33709E4B1B68DA70357885 -:10202000D02D01D000F016FE9A4E3068C378802B78 -:1020300001D000F00FFE964B1978FFF7A1FD0023A9 -:1020400030600188C57004004372C07ACDB2103888 -:10205000042801D900F0FCFD02F07EFA05006E00B4 -:1020600028012C01E700E27B012A0DD1802089099B -:10207000CEB20002102101F02BF80F21E0203140F8 -:102080000022000201F024F8E37B032B0FD120880B -:102090003D3380099D43804BC1B2C0B2C01880B2AD -:1020A00000F032FE8021237AA278294334E01E2BEF -:1020B00007D1C0202188223389099D43C9B200027B -:1020C000EEE7222B01D00B2B07D12088C009C1B22B -:1020D000C0B26C3880B200F017FEE37B1C2B11D12C -:1020E000A0208121C001268800F00EFE8020F60984 -:1020F000F6B23100000200F007FEA0200021C0016E -:1021000000F002FE8023E27B5B421F2A08D01D43C1 -:10211000EDB22900237AA278606801F0B1F883E07B -:102120007022A0202188954309091D43C9B2C0012E -:10213000EDB200F0E9FDECE7E37B002B06D1237A5A -:10214000A2782900606801F0D1F86072E37B0B2B64 -:102150000FD12188514849090901C9B200F0D4FDC5 -:102160001F231D40A278237A2900606801F0BEF881 -:102170006072E37BFE2B3ED1218849484909C9B2F0 -:1021800001F006F81F231D40237AA1780393454BE5 -:1021900028025A696768D2B202435A6180209022AD -:1021A000C000D20590610120FF269062033090624A -:1021B0005A69360232400A435A61C0463A48002200 -:1021C0008446C046604600690131000AB854586927 -:1021D000C9B230400843586101320398D2B29042EC -:1021E000EFD290230421DB0599618021C900996217 -:1021F000012199616272E27B012A16D180201021AF -:102200000002268800F064FF1F21A0203609F6B2E4 -:1022100031400022000200F05BFF0F21237AA278F8 -:102220002940606801F062F860721A4B1B681988D7 -:102230009A7A52181A80D822DA7000F00BFDC04644 -:102240000010024000200240025C0040505C004050 -:10225000065C0040006000400460004006600040F2 -:102260004C5C004020320000005C004000E100E0D7 -:102270000080FFFF585C0040DA0400209804002032 -:102280004404002030040020580400206C04002086 -:10229000240700208004002073E4FFFFFFFF0000FC -:1022A000FF3F00000008004800040048237AA2789D -:1022B0006021FAE6CB09FF21DB48DC4F46699A0032 -:1022C0003E400A403243C02790264261F605FF0097 -:1022D000DB0072693B40D64F7F393A40134373614C -:1022E00063680D430393237AA2780493D14B7F3123 -:1022F0005F692D020F403D43FB395D61B1620339D7 -:10230000B162FF26596936023140114359610021FB -:10231000C046C046C046C0460569039F2D0A7D548D -:102320005D690132D2B2354015435D610131049DD2 -:10233000C9B28D42ECD290230422DB059A61033AA4 -:102340009A61617271E7F37B002B09D18020039BB6 -:10235000B94A1843B94BBA490093330000F05CFF07 -:10236000F27B012A1CD1802010210002378800F066 -:10237000AFFEE020BF053F0F00223900000200F051 -:10238000A7FE747A039AA3B20493802313431B021B -:102390001BB20693337A049A934200D3E9E0747235 -:1023A000F37B032B17D1039A3C331A40130080228E -:1023B0001343039333889B0904936B461B7C06935A -:1023C000039B747A1B021BB2A7B20793337ABB42FA -:1023D00000D343E17472F37B1E2B15D1039A213392 -:1023E0001A40130080221343039333889B09DBB206 -:1023F0000593039B747A1B021BB2A5B20693337A32 -:10240000AB4200D370E17472F37B222B01D00B2B13 -:1024100011D13088C009C1B2C0B26C3880B200F0AE -:1024200073FC8020039B844A1843844B84490093A7 -:10243000330000F0F1FEF37B0C2B1AD1039A133317 -:102440001A401300C0208022348813436409A52158 -:10245000C001E4B2039300F057FC2100794800F07A -:1024600053FC794B794A009379493300039800F083 -:10247000D3FEF37B1C2B3ED1A02033888121DB09C6 -:10248000DBB2C001059300F03FFC802005990002FB -:1024900000F03AFCA0205421C00100F035FC757A10 -:1024A000AA21ABB26B48049300F02EFC55216A4878 -:1024B00000F02AFC2021674800F026FC8023A0279A -:1024C000039AFF0113431B021BB20793337A049A4A -:1024D000934200D356E1802090210002757200F0F3 -:1024E00013FC80200021000200F00EFC8020F0216F -:1024F000000200F009FCF37B1F2B33D1A0203188B0 -:10250000C0010909C9B200F0FFFB747AAA21A3B285 -:102510005048049300F0F8FB55214F4800F0F4FBBD -:1025200020214C4800F0F0FB70230427039A9A43C3 -:10253000F03B13435BB21B020593337A049A934238 -:1025400000D364E1802090210002747200F0DCFB73 -:1025500080200021000200F0D7FB8020F021000243 -:1025600000F0D2FBF4233288F370B37A9B183380E7 -:1025700092E3802000221021000200F0A9FDAA2190 -:10258000334800F0C1FB5521304800F0BDFBA021CD -:102590002F4800F0B9FB069D73682543ADB2195D65 -:1025A000280000F0B1FB802001221021000200F081 -:1025B0008FFDE02000223900000200F089FDC046B6 -:1025C000280000F0D7FB0590280000F0D3FB059B06 -:1025D0008342F4D17368059A1B5D134D93420FD16A -:1025E000049B2A6801339BB2049304239A432A6014 -:1025F000EA6801341343EB600223E4B2AB62C9E63C -:10260000802001221021000200F062FDE020002263 -:102610003900000200F05CFD04232A6813432B609C -:102620000223AB61B6E6C0460004004803FF000089 -:10263000FFF9000000080048AA2A0000B52D000894 -:1026400055550000FFFF0000092D0008AAAA000050 -:1026500055D50000AA8A0000558500000021CC480D -:1026600000F052FBAA21CB4800F0A4FB5521CA4838 -:1026700000F0A0FBA021C74800F09CFB6B46187C33 -:10268000C64B0699C01880B200F03EFB079D7368E8 -:102690002543ADB2195D280000F08CFBC046280030 -:1026A00000F068FB0590280000F064FB059B834266 -:1026B000F4D1736805991A5DB94B8A420DD1042291 -:1026C0001968013491431960D96801370A43DA6007 -:1026D0000222E4B2BFB29A6278E6042219680A4381 -:1026E0001A6002229A6171E6C0200121000200F006 -:1026F0000BFBAA21AB4800F007FBC0200021000221 -:1027000000F002FB5521A84800F0FEFAC02001218C -:10271000000200F0F9FAA021A24800F0F5FAC0206A -:102720000599000200F0F0FA069B23439FB27368FC -:102730003800195D00F0E8FAC046380000F01AFBD6 -:102740000490380000F016FB049B8342F4D17368B8 -:1027500004991A5D924B8A420DD104221968013402 -:1027600091431960D96801350A43DA600222E4B264 -:10277000ADB29A6243E6042219680A431A60022243 -:102780009A613CE65421380000F0BEFA079CA02173 -:102790002C43A4B2200000F0B7FA73682000595D02 -:1027A00000F0B2FAC046200000F0E4FA06902000E3 -:1027B00000F0E0FA069B8342F4D17368069A5B5DF1 -:1027C000774C93420FD16B1CDDB2049B226801331E -:1027D0009BB2049304239A432260E2681343E360AC -:1027E0000223A36272E68121380000F08DFA802076 -:1027F0000599000200F088FA5421380000F084FAAC -:1028000004232268134323600223A3615EE6059D2F -:10281000A0212543ADB2280000F076FA73682800A5 -:10282000195D00F071FAC046280000F0A3FA039089 -:10283000280000F09FFA039B8342F4D17368039948 -:102840001A5D574B8A420ED1049A0134013292B27A -:1028500004921A68E4B2BA431A60DA683A43DA605A -:1028600002229A6269E61A683A431A6002229A6161 -:1028700063E6F37B002B09D1039B747A1B021BB226 -:10288000A5B20593337AAB4247D27472F37B0B2B1C -:1028900011D1039A14331A40338803925B091B0148 -:1028A000747ADBB205931302A5B20693337AAB4276 -:1028B00000D383E07472F37BFE2B00D052E63188A4 -:1028C0003A484909C9B200F063FC747AAA21A3B25C -:1028D0003748049300F018FC5521364800F014FCEA -:1028E0002021334800F010FC1F230427039A1A40CC -:1028F00013020593337A049A934200D3ACE07472C6 -:102900009021002000F000FC0021080000F0FCFBFA -:10291000F021002000F0F8FB24E6AA21264800F070 -:1029200037FC5521224800F033FCA021224800F05A -:102930002FFC059B23439FB273683800195D00F09C -:1029400027FCC046380000F04BFC0490380000F033 -:1029500047FC049B8342F4D1736804991A5D104BC1 -:102960008A420DD104221968013491431960D96853 -:1029700001350A43DA600222E4B2ADB29A6281E71D -:10298000042219680A431A6002229A617AE7C04653 -:1029900073E4000055550000AA2A000073E4FFFF0D -:1029A0000004004855950000AAAA0000FF3F00005F -:1029B000AA0A0000550500005515000080202021BE -:1029C000000200F0A1F9AA21BA4800F0E1FB802042 -:1029D0001021000200F098F95521B74800F0D8FB0B -:1029E00080202021000200F08FF9A021B14800F0E2 -:1029F000CFFB80200599000200F086F9069B234357 -:102A00009FB273683800195D00F0C2FBC046380001 -:102A100000F0E6FB0490380000F0E2FB049B8342E8 -:102A2000F4D1736804991A5DA44B8A420DD1042233 -:102A30001968013491431960D96801350A43DA6095 -:102A40000222E4B2ADB29A6230E7042219680A4366 -:102A50001A6002229A6129E7059DA02125432800DA -:102A600000F052FB73682800195D00F04DFBC04672 -:102A7000280000F071FB0390280000F06DFB039B21 -:102A80008342F4D1736803991A5D8C4B8A420ED14C -:102A9000049A0134013292B204921A68E4B2BA4341 -:102AA0001A60DA683A43DA6002229A6222E71A6808 -:102AB0003A431A6002229A611CE7FF257F4CDB092A -:102AC00061697F489A0001402A400A436261C02040 -:102AD0009022C000D205DB005169034079480140D3 -:102AE0000B435361777AC046C046C046C046C046D5 -:102AF000C046C046C046C046AA21734800F0A2FAAC -:102B00005521724800F09EFA20216F4800F09AFA91 -:102B10008023039A05951A4313021BB20693FBB256 -:102B20000393337ABB4213D26B4680201B7B9021E8 -:102B30007372000200F086FA80200021000200F08B -:102B400081FA8020F021000200F07CFAC04609E5FD -:102B500022685F4B082113432360059A6369134081 -:102B6000A02212021343636190230122DB059962C4 -:102B70009A62C046C046C046C04699619A612368C1 -:102B8000544A059D13402360069B3D40039A1D4314 -:102B90007368ADB2995C280000F054FAC046C04694 -:102BA000C046C046C046C046C046C046C046C046F5 -:102BB000280000F06DFA0490C046C046C046C046EA -:102BC000C046C046C046C046C0467368039A9B5C78 -:102BD000834217D0C046C046C046C046C046C04625 -:102BE000C046C046C046280000F052FA049B9842F6 -:102BF0000BD1C046C046C046C046C046C046C046CF -:102C0000C046C0460137BFB289E7C046C046C0468D -:102C1000C046C046C046C046C046C046C046C04684 -:102C2000C046C046C046C046C046C046C046C04674 -:102C3000C046C046C046C046C046C046C046C04664 -:102C4000C046C046C046280000F022FA0490CAE7F9 -:102C5000C323E370204B1C78F02C1DD11F4D2E6830 -:102C6000F378982B18D11E4B30001978FEF788FFA7 -:102C700000232860C3703388F470DAB20392F07ACC -:102C80001038042806D801F05DFC5EFBF4FD6DFCF5 -:102C900018FF6DFCC323F370124B1B78F02B01D18E -:102CA000FFF77EF9832B01D0FFF77AF9FFF702F8DF -:102CB000FFF776F955150000AA0A00000004004845 -:102CC00003FF0000FFF90000AA8A000055850000FC -:102CD00000005555FFFFAAAA980400208004002098 -:102CE00024070020DA040020002302000002002A4A -:102CF00004D1002B01D0802318437047DB43511EC1 -:102D0000DBB20A40F3E700009023DB0530B51C6816 -:102D1000134D09022C401C60DA68124C2A40DA601C -:102D2000114A506102229A62104A00B215682C437F -:102D300014605469E4B2214351618021C900996152 -:102D4000002801DA01209862C046C046996201213C -:102D5000996149189961136805490B40136030BDAA -:102D6000FFEFFFFF00005555000800480004004831 -:102D7000FFFFAAAA0D4B802258619023D200DB05E9 -:102D800000B29A61002801DA01229A62C046C04668 -:102D9000C046C046064B802218699023D200DB054E -:102DA0009A620122000AC0B29A6170470008004886 -:102DB00000040048104B114A10B558611068104BC0 -:102DC00009020343136053690E4CDBB2194390238D -:102DD00051618021DB0518684901084318604020D3 -:102DE0009862186820401860D8680143D960136859 -:102DF00005490B40136010BD00080048000400485E -:102E000000005555FFEFFFFFFFFFAAAA224B10B5A8 -:102E10001968224B224C1A8852085200505A214AF3 -:102E200010801A88023292B21A8052085200505A08 -:102E30001D4A10801A88023292B21A80520852003B -:102E4000505A1A4A10801A881948023292B21A80CF -:102E500052085200515A174A11801A8821880232AA -:102E600092B21A808A4210D908318A1A92B202802C -:102E700022881A801049114B0A881343104A1A40BD -:102E8000302353409BB20B8010BD0E4C21888A42E8 -:102E9000EAD808230380EDE72007002096040020ED -:102EA00094040020406000404260004044600040C4 -:102EB0000260004046600040005C00408080FFFFF0 -:102EC000BF8FFFFF92040020FEE70000F7B501234B -:102ED0000225294F01923A7800910543934004213D -:102EE000A020264E2D049BB229433268C00100F079 -:102EF00037FA040001283DD13B7809209C40054366 -:102F00007830A3B232682900FF3000F029FA0400BB -:102F100001282FD13B7832689C402900A3B20020C1 -:102F200000F01EFA0400012824D1009B180AFFF7C4 -:102F3000DBFE3B7832689C402900A3B200F010FA17 -:102F40000400012816D16B461878FFF7CDFE220049 -:102F50003B7829009A4093B2326800F001FA019858 -:102F6000FFF7C2FE3B7832689C402900A3B200F014 -:102F7000F7F90400E0B2FEBDFC060020F8060020D0 -:102F8000F7B501230225274F00903A7801910543B8 -:102F900093400421C020244E2D049BB22943326863 -:102FA000800100F0DDF90400012838D109231D4318 -:102FB0003B78C0209C403268A3B22900400000F05A -:102FC000CFF9040001282AD13B7832689C402900BF -:102FD000A3B2002000F0C4F9040001281FD1019B16 -:102FE000180AFFF781FE3B7832689C402900A3B2A3 -:102FF00000F0B6F90400012811D16B461879FFF7EB -:1030000073FE22003B789A4093B2009A144309223F -:10301000E1B209041143326800F0A2F90400A0B241 -:10302000FEBDC046FC060020F806002000238000FC -:1030300080B2834200D17047C046C04601339BB284 -:10304000F7E700000E4B0F4A58610F4B0902186852 -:1030500002431A605A690820D2B211439022596182 -:103060000121D20590629162C046C046C046C0466A -:10307000906191611A6805490A401A607047C0461C -:10308000000800480000555500040048FFFFAAAAA8 -:103090000D4B0122586190230421DB059A6299624D -:1030A000C046C046C046C046C046C046C046C046F0 -:1030B000C046C046C046C046C04604480069996143 -:1030C000000AC0B29A617047000800480004004836 -:1030D00070B506000D00002A08D080200002FFF71E -:1030E00049FE802080210002FFF70EFE05243000FB -:1030F000013CFFF73FFEE4B229003000FFF704FE79 -:103100006D08002CF3D170BD0F4B30B59022586183 -:1031100080230124D205DB0093620C4B94621D686E -:103120000B480902284318605869C0B2014359612D -:10313000C04608219162C046916119680548014066 -:103140001960946130BDC046000800480004004882 -:1031500000005555FFFFAAAA0B4B10B580215861FE -:10316000902301220424DB05C90099619A629C62C4 -:10317000C046C046C046054800699C61000A996285 -:10318000C0B29A6110BDC046000800480004004863 -:103190000E4B984202D880231B0218430C4B0D4A59 -:1031A00058610D4B0902186802431A605A69D2B27D -:1031B00011435961C04690220821D2059162C04650 -:1031C00091611A6805490A401A607047FF1F0000A4 -:1031D000000800480000555500040048FFFFAAAA57 -:1031E0000A4B984202D880231B021843084B042242 -:1031F00058619023DB059A62C046C046C046C0466F -:10320000044908699A61000AC0B27047FF1F0000B4 -:103210000008004800040048F0B585B00191039211 -:1032200000025E7A1D0003B202932B7AF7B2B3421A -:1032300003D200206F7205B0F0BDFF24AA210198CF -:103240000A9B9847552103980A9B9847A02101980B -:103250000A9B9847029B34401C436B68A4B2D95D1B -:1032600020000A9B9847C0462000FFF783FD070017 -:103270002000FFF77FFD8742F5D10136B6B2D4E7D3 -:10328000F0B5184C050060690E02C0B230436061B1 -:1032900080269020F600C00549B28661002901DA37 -:1032A00001218162FF26616936023140114361616B -:1032B000C04600200C4FC04639690132090A295422 -:1032C0006169D2B2314001301143C0B261619842AC -:1032D000F1D990238022DB05D2009A6201229A6103 -:1032E000F0BDC0460008004800040048F0B5174C87 -:1032F00005000E0060691F2925D88021314309028D -:10330000C0B20143616190210420FF26C905886293 -:1033100061693602314011436161C04600200C4FA3 -:10332000C04639690132090A29546169D2B2314073 -:1033300001301143C0B261619842F1D99023042257 -:10334000DB059A61F0BDC0B20902DAE70008004867 -:103350000004004800000000000000000000000021 -:10336000F0B5474680B4061C081C000C102801D597 -:10337000162700E004270007000F8046FF200140C9 -:103380005468251C1D439C43F60313850AD5C0468B -:10339000C046C046C046C046C046C046948013835F -:1033A000958002E0012000F081F801390AD4381C30 -:1033B00000F07CF8C046948013839580C046C046D8 -:1033C0007600E2E7381C013800F070F8948013832F -:1033D0009580042000F06AF8108A184001D0FF2080 -:1033E00061E0C046C046C046C046C046C046948064 -:1033F0009580108A184055D001200226B04552D041 -:103400000921168A1E40FCD1012000F04FF894805B -:10341000C0469580C04603E0C046C046C046C04690 -:10342000948095807600108A1840EFF30080400069 -:10343000C00F0643381C023800F038F8948095809D -:10344000022000F033F80139EAD513859480012079 -:1034500000F02CF813839580301C802102239940C2 -:103460000E401BD1002341085E4149085E414908D6 -:103470005E4149085E4149085E4149085E4149088C -:103480005E4149085E4149085E41760808D340081C -:10349000FF21084048400002013004E00E2002E015 -:1034A000092000E0002080BCB846F0BD0138FDD105 -:1034B0007047C04603685A0003D45B005B08C0181D -:1034C0007047802212061343F9E7C046F0B557460D -:1034D0004E46DE464546E0B5814683B09246002919 -:1034E00025D04B1E9B46002701935B46FB18DC0F43 -:1034F000E4184B466410E5005E193000FFF7DAFF70 -:10350000019B8046A3420BD0280008304844FFF7B7 -:10351000D1FFD04506D80138504509D2671CE4E7F1 -:10352000504505D9A74202D0631E9B46DDE7002621 -:10353000300003B03CBC90469946A246AB46F0BD75 -:10354000012809D0022805D0002801D000207047AA -:103550000248FCE70248FAE70248F8E7613C000845 -:10356000793C00086D3C000830B5234B83B0050062 -:103570008C1E002B2AD001A9200000E000BF0028EB -:1035800020D001992200FFF7A1FF041E1AD0FFF7F7 -:1035900091FF6368A864012B10D0201D002B1BDB5A -:1035A000FFF788FF0023E8642B650368002B17DB17 -:1035B000FFF780FF2861002003B030BD0023052005 -:1035C0002B61F9E7002309202B61F5E70B480C4933 -:1035D000091AC9100191D5E70123E8642B65E4E7D6 -:1035E0001801000FFFF7ACFF2861002801D1093056 -:1035F000E2E70020E0E7C046000000005C4600086B -:103600002C470008036810B50400DA0705D49B07AF -:103610000FD5483000F084FC23685A070FD51A07ED -:1036200014D5DB0604D42000D130FF3000F084FC38 -:1036300010BD483000F070FC23685A07EFD420001A -:10364000D03000F071FC23681A07EAD42000513012 -:10365000FF3000F06DFC2368E3E7C0460368002BF1 -:1036600000D01B1818007047092070477047C046EB -:1036700070B504000D0008E02B6C2A006361210086 -:10368000012023699847082807D1296C2000FFF7FB -:103690006BFF0028F0D000F09FFE0728FBD1002030 -:1036A000296CFFF7E3FF281D00F020FCF0B5CE46A3 -:1036B000474680B5C368324C9846A54483690600E6 -:1036C00014000431402205A8994600F08DFE002325 -:1036D00004AD296C30000493FFF746FF631E9C4144 -:1036E00007000934002F15D0AB6B10216B644B46DB -:1036F00021430193C9B20095330032000120C04735 -:10370000002833D13800F5239B009D440CBC904623 -:103710009946F0BDF0222B6C5200736129007CA801 -:1037200000F062FE7CAA31003369200098478A9B32 -:1037300007006B6403934B460095019332003300FE -:1037400021000120C047002810D1F0227CA952009E -:10375000280000F049FE082F06D1296C3000FFF741 -:1037600003FF09240700BDE7072F01D00927C9E798 -:103770000020296CFFF77AFF05A800F0B7FBC046D0 -:103780002CFCFFFF406C704770B5CB6BFAB00B643C -:1037900004000E004022043103A800F025FE01239E -:1037A0005B42029306E002AA2100236998470500C4 -:1037B00008280AD1129B200019000193FFF7D4FEBC -:1037C0000028F0D009207AB070BD02A8FFF71AFFD8 -:1037D000062DF7D131002000FFF74AFF10B58261B6 -:1037E000DA6BC1601A6419000022FFF75FFF10BD99 -:1037F000436970B50B64C36804000D00002B04D04E -:103800000122FFF753FF00F0E7FD0A0023690100E2 -:1038100002209847072807D0082803D12900200054 -:10382000FFF726FF00F0D8FD0020296CFFF71EFFF0 -:10383000281D00F05BFBC046C36810B5002B05D007 -:10384000CB6B00220B64FFF731FF10BDFFF79CFF2D -:10385000FBE7C0467047C046836810B5002B02D016 -:1038600001000120984710BD10B5012907D000299B -:1038700007D003390224012901D9200010BD0124F9 -:10388000FBE70224002BF8D10F2AF6D89200821809 -:103890005268029B00241A60EFE7C04600B585B06D -:1038A00003AB0A00009300210023FFF7DDFF03981C -:1038B00005B000BD10B5012907D0002907D0033994 -:1038C0000224012901D9200010BD0124FBE70224B4 -:1038D000002BF8D10F2AF6D8029B92001B688218A1 -:1038E00053600024EFE7C04600B585B003AB0392F8 -:1038F00000930A0000230021FFF7DCFF05B000BDA4 -:1039000070B51A4CD36BA544136406000D0019A8BA -:10391000111D402200F068FD01235B42189314E062 -:103920000C2118A802AAFFF7DFFF290018A8B0474A -:10393000002812D1069B18AA02A9083001939847C3 -:10394000040005280AD0092807D0289B02A81900DE -:103950000193FFF709FE0028E2D0092418A8FFF719 -:1039600051FE200090239B009D4470BDC0FDFFFFD1 -:10397000F0B5DE464E464546574693460322E0B52F -:103980001E0013008BB003400193CB6C0D001C1D77 -:103990001B6808940793002E66D11B02079306ABA1 -:1039A0005E731A73019B022B00D16EE02B6DDB0757 -:1039B00047D40023A846B24602930833034003933A -:1039C0002568002D00D137E15346022B49D02588C8 -:1039D000668804340123370099469F4343469B6C15 -:1039E0000F219C4658466744FFF758FF0022874244 -:1039F00006D82A004B469A43D719B8428041424222 -:103A000002230121760033400D402B43012B3ED091 -:103A1000002B5AD0022B1CD1236801995F007F082C -:103A2000002965D1002A06D0039A002A00D188E037 -:103A3000002F00D1AAE0002B65DB0137BF00E4199D -:103A4000BEE700230293022E47DDFFF70DFE00289C -:103A500049D009200BB03CBC90469946A246AB46E3 -:103A6000F0BD66680834B5E7022E9BDC1A0C1B0417 -:103A70000793022306A90B73FD3313409B00E41840 -:103A8000019B4A73022B00D090E7AC6B8EE7019B41 -:103A9000002B3AD1002A16D02368DD0F63689A1CE8 -:103AA000D7D0424658320692013300D1C6E0201DDD -:103AB000FFF7D4FD06AB01002A00404600E000BF3E -:103AC000002800D0A7E008347AE7019B002B02D041 -:103AD000002A00D08BE0043472E707A9584600F0B2 -:103AE000D1FA0028B5D1029B002B5DD10820B1E7A7 -:103AF00043460D2158461D6AFFF7D0FE854263D02C -:103B00002368002B99DA043497E743460D21584681 -:103B10001D6AFFF7C3FE8542D5D143469B6A9C428E -:103B2000D1D145462000FFF7C5FC0F2102005846C1 -:103B3000FFF7DAFE58462A000021FFF7D5FE0720DE -:103B400088E7002F22D058235146434406AABA469C -:103B5000251D0026049405911F00914603E00435BD -:103B60002600A24514D028000697FFF777FD4B46A4 -:103B7000010000224046741C00E000BF0028EED087 -:103B80005746059B049C9A46B742B9D1454601E089 -:103B90004546049C0D215846FFF780FE069B28628F -:103BA0006B62AC62062055E70F215846FFF776FEA0 -:103BB0000E2102005846FFF797FE5846274A0F216C -:103BC000FFF792FE072045E743469B6A9C4297D148 -:103BD000434642469F620023D36204331363231D8E -:103BE00053632368002B32DB0123029325E7200077 -:103BF000FFF760FC454604340600AC63404600E035 -:103C000000BF002800D124E7584632000F21FFF7FB -:103C10006BFE07201EE707000D2158464546FFF7BB -:103C20003DFE2862022F0FD1069BEB6243462C33E8 -:103C30006B62AC6206200DE7564604E70D2158463C -:103C40004546FFF72BFE2862069B6B62F1E73800C2 -:103C5000013080004546201865E7C046000000009E -:103C600010B50023FFF784FE10BDC04610B5012338 -:103C7000FFF77EFE10BDC04610B50223FFF778FEA9 -:103C800010BDC046F0B5CE46474680B50600C3B06D -:103C900014001D0001294ED0002933D003290AD079 -:103CA000042902D1002B00D189E0022043B00CBCD2 -:103CB00090469946F0BD032BF7D11404150C240C43 -:103CC0002B19102BF1D8082203681A4200D0E7E024 -:103CD00020AB1800984600F02DF9B36BED001A00E8 -:103CE000002C09D0E400EA1A1C1942441968D1508A -:103CF00004339C42FAD12200B263404600F018F926 -:103D00000020D3E70220002BD0D10023012710048C -:103D1000B56B000C321D39009940084202D0296869 -:103D20000435116001330432102BF4D10020A304B8 -:103D3000BCD4B563BAE71404170C240C012B5FD074 -:103D4000052BB2D13B19202BAFD80F2F7DD9A1461F -:103D5000002C65D1002223009146B16B002B00DCC2 -:103D600088E020A88046FA00DB00521ACB184244B3 -:103D70000868505004318B42FAD119004B46002B91 -:103D800010D04B4658003A00102F00D210220023CA -:103D9000103AD2006A448000CC58D4500433834295 -:103DA000FAD1C918012D5ED0B1630F2F74D94B46DB -:103DB000002BA5D0684600F0B7F8002076E7102A5F -:103DC00000D972E7102203681A4245D120AB1800CF -:103DD000984600F0B3F800230120B16B02009A402E -:103DE000144204D045460F689A00AF5004310133A5 -:103DF000042BF3D14046B16300F09EF8002055E754 -:103E00003B19102B00D950E70F2F00D94DE70023A5 -:103E10009946012233681A4230D14B46002B5AD0C2 -:103E2000042233681A4242D1012D47D00F2F06D801 -:103E300020AB180000F076F84B46002B8AD068467D -:103E400000F074F81023DB1B87E7102BDFD910225A -:103E5000524291469944DCE793430360D130FF30EE -:103E600000F06CF8B2E7043120A8B16300F054F818 -:103E700000201BE74B46002B84D193E719009143A8 -:103E80000A003160052D1ED00322300093433360B9 -:103E9000483000F043F8C0E720A800F041F886E77A -:103EA000934303605130FF3000F044F810E73000D6 -:103EB00093433360D03000F039F8B5E720AB1800F9 -:103EC00000F02CF8BEE7022330001A43326048307D -:103ED00000F028F8A1E7012D03D00F2F00D939E712 -:103EE000A6E720AB180000F019F833E7011C3431C5 -:103EF00038C9043B9C461D60A646011C20313CC9C4 -:103F000090469946A246AB46011C0831FCC941685F -:103F10000068E54600BDC0467047C0467047C046D1 -:103F20007047C0467047C0467047C0467047C0469D -:103F30007047C0467047C0467047C0467047C0468D -:103F400001B401A801B585B0FFB408A841464A46AE -:103F500053465C4665463EC001A83EC80F98009097 -:103F600000230CB401A9FFF70FFC109B12B01847F7 -:103F700001B401A801B585B0FFB408A841464A467E -:103F800053465C4665463EC001A83EC80F98009067 -:103F900000230CB401A9FFF72BFC109B12B01847AB -:103FA00001B401A801B585B0FFB408A841464A464E -:103FB00053465C4665463EC001A83EC80F98009037 -:103FC00000230CB401A9FFF737FC109B12B018476F -:103FD00001B401A801B585B0FFB408A841464A461E -:103FE00053465C4665463EC001A83EC80F98009007 -:103FF00000230CB401ABFFF7F1FB109B12B0184784 -:1040000001B401A801B585B0FFB408A841464A46ED -:1040100053465C4665463EC001A83EC80F980090D6 -:1040200000230CB401AAFFF76BFC109B12B01847D9 -:10403000027A0300002A04D1427AB020002A07D174 -:104040007047013A02720268100E12021A60F7E716 -:10405000013A5A725A68111D596003211268197287 -:10406000F2E7C04600B585B003AB00930C220023F5 -:104070000021FFF7F9FB039805B000BD10B5FFF76D -:10408000F1FF10BDF0B557464E464546DE460023CB -:10409000E0B587B003930F339846083B99468023D9 -:1040A0001B0306000F009A463800FFF7C1FF04000B -:1040B000B02821D0030632D4FF2583001D4005AB74 -:1040C0009B4600930D220023002130000435FFF7AA -:1040D000CBFB63064CD5059B5D1B05955B460093AA -:1040E00000230D2200213000FFF7E4FB3800FFF72A -:1040F0009FFF0400B028DDD1039B0024002B2FD1AB -:1041000005AD00950E2200213000FFF7ADFB0095B4 -:1041100000230F2200213000FFF7CCFB20E003003A -:1041200042469343DBB2802B63D0902B25D0A02B4B -:1041300032D0B02B45D0C02B00D173E003004A46EB -:104140009343DBB2D02B0AD15346024001321A43CB -:10415000052301213000FFF795FD0028A4D0092494 -:10416000200007B03CBC90469946A246AB46F0BD45 -:10417000059B9C4665440595B0E7833B03400D2BAA -:10418000EDD0424605AD02400095002300213000ED -:10419000FFF76AFB0095A3E7FF234A461B011900BE -:1041A000824311410A001A40030702D58023DB0134 -:1041B0001A43002300213000FFF764FD0028CED110 -:1041C00072E7B1284AD0B2285ED0B32800D18BE084 -:1041D000FC230340B42BC2D04A465346024001326E -:1041E0001A43012101233000FFF74CFD0028B6D10E -:1041F0005AE704023800FFF71BFF802520432D02F9 -:10420000A842ACD004010005020C002300213000BC -:10421000FFF738FD0028A2D12C4200D144E701234A -:10422000039341E7C6286AD0C7287CD003004A46DA -:104230009343DBB2C02B00D18BE0C82800D18FE0C4 -:10424000C92800D08BE73800FFF7F2FEF023020305 -:104250001B03134042460240013278E73800FFF763 -:10426000E7FE002800D17AE7030042469343DBB221 -:10427000002B00D073E7020000213000FFF702FDA1 -:10428000002800D06BE70FE705AB00939B460D229B -:10429000002300213000FFF7E7FA3800FFF7C8FEDF -:1042A00003066AD57F25B03C059B2840A0409C466C -:1042B0006044059038000734FFF7BAFE0306F3D4D4 -:1042C000812292009446863AFF3A1040A040059B16 -:1042D000723A634418185B4605900093002100234E -:1042E0003000FFF7E7FADFE63800FFF7A1FEF02322 -:1042F00002031B03134042460240013270E73800BC -:10430000FFF796FEF02302031B03134042460240D0 -:1043100001321A43032303213000FFF7B3FC0028C6 -:1043200000D01CE7C0E63800FFF782FE002800D16D -:1043300015E7030042469343DBB2002B00D00EE7A3 -:10434000020004213000FFF79DFC002800D006E7A2 -:10435000AAE64346A0221C40013412032243D9E7B7 -:104360003800FFF765FE434602009A43D2B210328E -:104370001840120301300243EAE60224A0E7C046D7 -:10438000030000B5DB6C85B05A6808001202019288 -:104390001A0001A908324A6003220A72DB794B72C3 -:1043A000FFF770FE05B000BD10B5FFF767FE806C2B -:1043B00010BDC04610B5FFF761FEC26CD3799B00FB -:1043C0000833D01810BDC04610B500F005F8C0463F -:1043D00010B5FFF7F9FFC04610B5062000F074F8DD -:1043E000012000F0A3F8C046F0B505000F2A2FD930 -:1043F0000B0003439B0734D116000C000300103E52 -:10440000350901352D01451927681F6067685F6010 -:10441000A7689F60E7681034DF6010339D42F3D1D6 -:104420000F239E431036851989191340032B1AD97F -:104430001E1F0023B4080134A400CF58EF500433EA -:10444000A342FAD10324A643331D2240C918ED1814 -:10445000002A05D00023CC5CEC5401339342FAD1FE -:10446000F0BD0500F6E71A00F2E7C04670B505009A -:104470000C001F2922D8B7239B00C358002B14D04F -:104480008A009B181A68002A0FD0012A0BD0511CF1 -:1044900005D00021200019609047002070BD162330 -:1044A00003600120FAE70020F8E7280000F02AF86E -:1044B00022000100280000F011F8EFE71623036046 -:1044C00001204042EAE7C04610B5034B01001868DE -:1044D000FFF7CCFF10BDC04600000020002370B5E0 -:1044E000074C050008001100236000F017F8431C7A -:1044F00000D070BD2368002BFBD02B60F9E7C046CD -:104500002807002010B500F001F810BD5822012046 -:10451000014B40421A6070472807002058220120B2 -:10452000014B40421A60704728070020FEE7C04652 -:1045300002B4714649084900095C49008E4402BC36 -:104540007047C04603B47146490840004900095EFF -:1045500049008E4403BC704703B4714649084000CB -:104560004900095A49008E4403BC7047F8B5C0465B -:10457000F8B5C046090212000101008032090400AA -:1045800000000000000012010002FF000008C01639 -:10459000DC05000201020001040309042A034900AA -:1045A0006E00660069006E006900740065004E00D0 -:1045B000650073004C0069007600650073002E00F2 -:1045C00063006F006D0000000000000000000000AC -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F0001E0349004E004C0020005200650074006C -:1046000072006F002D00500072006F006700000004 -:10461000000000000000000000000000000000009A -:0C4620000000000000000000000000008E -:10462C0074B20181B0AB308000000000800A0181BF -:10463C00B0B0ABF0000000003F020181B0AB3080A5 -:10464C000000000080060181B0B0ABF0000000005B -:10465C0004EDFF7FB0B0B08050EEFF7F0100000092 -:10466C00FCEEFF7FB0A9028090EFFF7FB0B0A88076 -:10467C00E0EFFF7F01000000ECEFFF7FB0B0AA80FD -:10468C0020F0FF7F9CFFFF7FF0F0FF7F0100000018 -:10469C00ECF0FF7FAA3F398038F1FF7FB0B0A880E3 -:1046AC0044F1FF7FB0B0AA8084F1FF7FB0B0A88046 -:1046BC0098F1FF7F0100000094F1FF7FB0B0A8805B -:1046CC009CF1FF7F010000002CF2FF7FAA0FB2804B -:1046DC0094F2FF7F58FFFF7F7CF5FF7FB0B0A8807E -:1046EC0098F5FF7F54FFFF7FF8F7FF7F0100000074 -:1046FC0068F9FF7F0084048078F9FF7FB0B0A88050 -:10470C0078F9FF7F40FFFF7F6CFCFF7F0084048003 -:10471C008CFCFF7FB0B0A880A4FCFF7F01000000E0 -:10472C00080000200000000000000000F40200203F -:10473C005C030020C4030020000000000000000007 -:10474C00000000000000000000000000000000005D -:10475C00000000000000000000000000000000004D -:10476C00000000000000000000000000000000003D -:10477C00000000000000000000000000000000002D -:10478C00000000000000000000000000000000001D -:10479C00000000000000000000000000000000000D -:1047AC0000000000000000000000000000000000FD -:1047BC0000000000000000000000000000000000ED -:1047CC0000000000000000000000000000000000DD -:1047DC0001000000000000000E33CDAB34126DE67A -:1047EC00ECDE05000B0000000000000000000000E3 -:1047FC0000000000000000000000000000000000AD -:10480C00000000000000000000000000000000009C -:10481C00000000000000000000000000000000008C -:10482C00000000000000000000000000000000007C -:10483C00000000000000000000000000000000006C -:10484C00000000000000000000000000000000005C -:10485C00000000000000000000000000000000004C -:10486C00000000000000000000000000000000003C -:10487C00000000000000000000000000000000002C -:10488C00000000000000000000000000000000001C +:1000E000FCDC01F051FF00007C480008000000200B +:1000F000300400203004002030070020FEE7C04616 +:10010000F0B5C74A89B0138801921BB2002B01DBFE +:1001100001F02EFC1388C34A1A4080231343019A2E +:100120001380019B1A8880231B011340BE4A01D112 +:1001300001F0ECFBBD49BE4C0B68BE4801330B60BF +:1001400023787F211D008D43BB49BC4E0D70E18893 +:10015000018000203080602633401370B84A2600AA +:10016000157083424DD0FF23B64CCAB22370B64BF4 +:1001700060701C600292707801380E2801D901F07D +:1001800073FB04F091FA0F003F06E00788081C0A91 +:10019000710B5C0B0409AD09F4091A0AB308E708EE +:1001A000EF08F708B078B3888C22192824D8802269 +:1001B000D20004F079FA1A0056007E015E023D0377 +:1001C000C6035904150531053D0545054D05560580 +:1001D0005F056D0575057D0585058A059E05B405D8 +:1001E000D505EA05010625033103B023974A5B03D1 +:1001F00051690B435361002222706A46944B128965 +:100200001A803378602259B2002901DB01F04FFBDC +:10021000134016D17278062A0FD17288110A02296A +:1002200001D101F023FB032901D101F025FB894A0B +:10023000012901D101F01BFB03936A46844B92898B +:100240001A80019B1A88844B1343844A1A40C023A6 +:100250009B015340019A9BB2138002F01FFE01F0F4 +:1002600047FB152B01D900F0BEFD18008023DB00F1 +:1002700004F01AFA160023002E00B90539004400D4 +:100280004F00B9055C00690073008000B905B9052D +:100290008D009A00A500B200BF00CC000A01140135 +:1002A0009022D20513686E490B4013608023D168F9 +:1002B0005B030B43D36000229EE790210123C90515 +:1002C0000A689A430A60CA681343CB60002293E726 +:1002D00090210423C9050A689A430A60CA68134337 +:1002E000CB60002288E790211023C9050A689A4351 +:1002F0000A60CA681343CB6000227DE79021402347 +:10030000C9050A689A430A60CA681343CB60002291 +:1003100072E79022D205136852490B401360802384 +:10032000D168DB040B43D360002265E79022D2053D +:1003300013684D490B4013608023D1685B010B4368 +:10034000D360002258E7042348490A689A430A60A8 +:10035000CA681343CB6000224EE79022D20513688F +:1003600043490B4013608023D168DB050B43D36006 +:10037000002241E79022D20513683E490B401360EA +:100380008023D168DB020B43D360002234E7902244 +:10039000D205136838490B4013608023D1685B0095 +:1003A0000B43D360002227E79022D205116833481F +:1003B00001401160D1680B43D36000221CE79022FA +:1003C000D20513682E490B4013608023D168DB01EE +:1003D0000B43D36000220FE79022D2051368214916 +:1003E0000B4013608023D168DB040B43D3600022F1 +:1003F00002E79022D205136822490B401360802344 +:10040000D1685B050B43D3600022F5E60123174951 +:100410000A689A430A60CA681343CB600022EBE67D +:10042000005C00408F0F0000F206002090040020C6 +:100430004860004096040020F00600209A04002046 +:10044000F1060020F40600202407002000100240DE +:1004500098040020D64600088081FFFF8FBFFFFF71 +:10046000FFFFEFFFFFFFFFFBFFEFFFFF0004004870 +:10047000FFFFFFBFFFFFFBFFFFFEFFFFFFFBFFFFD5 +:10048000FFBFFFFFFFFFFFEF1023D2490A689A4327 +:100490000A60CA681343CB600022ADE69021C9050B +:1004A0000A68CD4802400A60CA681343CB60002244 +:1004B000A2E6152B01D900F099FC180004F0F4F81D +:1004C000160021002C009604370042004D009604CF +:1004D000580063006D0078009604960483008E0037 +:1004E0009900A400AF00BA00C400CE009023DB0541 +:1004F0001968BA4801401960DA680240DA600022DF +:100500007AE690230121DB051A688A431A60DA68CB +:100510008A43DA6000226FE690230421DB051A6823 +:100520008A431A60DA688A43DA60002264E690231C +:100530001021DB051A688A431A60DA688A43DA6098 +:10054000002259E690234021DB051A688A431A608D +:10055000DA688A43DA6000224EE69023DB051968E8 +:100560009F4801401960DA680240DA60002243E6E1 +:100570009023DB0519689B4801401960DA68024046 +:10058000DA60002238E60421974B1A688A431A6021 +:10059000DA688A43DA6000222EE69023DB051968C8 +:1005A000924801401960DA680240DA60002223E6CE +:1005B0009023DB0519688E4801401960DA68024013 +:1005C000DA60002218E69023DB05196889480140AB +:1005D0001960DA680240DA6000220DE69023DB053C +:1005E00019687D4801401960DA680240DA6000222B +:1005F00002E69023DB0519687F4801401960DA683C +:100600000240DA600022F7E59023DB0519687448A0 +:1006100001401960DA680240DA600022ECE59023BC +:10062000DB051968754801401960DA680240DA6034 +:100630000022E1E501216C4B1A688A431A60DA68EE +:100640008A43DA600022D7E51021624B1A688A4398 +:100650001A60DA688A43DA600022CDE59023DB0570 +:1006600019685D4801401960DA680240DA600022CA +:10067000C2E5152B00D9BCE3180004F015F81600EC +:100680001F002700BA032F0037003F00BA034800BD +:10069000510058006100BA03BA036A0073007A007F +:1006A00083008C0095009C00A30090228023D2053B +:1006B00011685B030B43136000229DE59022012328 +:1006C000D20511680B431360002295E590220423A4 +:1006D000D20511680B43136000228DE59022102390 +:1006E000D20511680B431360002285E59022402358 +:1006F000D20511680B43136000227DE59022802310 +:10070000D2051168DB040B431360002274E59022CC +:100710008023D20511685B010B43136000226BE557 +:100720000423314A11680B431360002264E59022D0 +:100730008023D2051168DB050B43136000225BE5C3 +:1007400090228023D2051168DB020B431360002244 +:1007500052E590228023D20511685B000B431360A1 +:10076000002249E59021C9050B681A430A6000225E +:1007700042E590228023D2051168DB010B43136010 +:10078000002239E590228023D2051168DB040B4357 +:100790001360002230E590228023D20511685B05AA +:1007A0000B431360002227E501230F4A11680B4316 +:1007B0001360002220E51023064A11680B431360E2 +:1007C000002219E59021C9050B681A430A6000222E +:1007D00012E5C046000C0048FFFBFFFFFFFFEFFFE4 +:1007E000FFFFFFFBFFEFFFFF00040048FFFFFFBF1D +:1007F000FFFFFBFFFFFEFFFFFFBFFFFFFFFFFFEF5E +:100800008D22082B00D0F7E49022D20551683833AE +:100810000B4353600022EFE48D22082B00D0EBE461 +:1008200090224021D20553688B4353600022E3E4B9 +:10083000152B00D9E0E2180003F036FF16001B006C +:100840002100DE0227002D003300DE023A004000C6 +:1008500045004C00DE02DE02530059005F006500D7 +:100860006C00730078007D009023DB059A62002203 +:10087000C2E490230122DB059A620022BCE49023AB +:100880000222DB059A620022B6E490230422DB05F3 +:100890009A620022B0E490230822DB059A620022CB +:1008A000AAE4802290239201DB059A620022A3E44D +:1008B00090234022DB059A6200229DE40222D14B64 +:1008C0009A62002298E4802290231202DB059A6249 +:1008D000002291E4802290239200DB059A6200229C +:1008E0008AE490231022DB059A62002284E490239C +:1008F0002022DB059A6200227EE490238022DB0521 +:100900009A62002278E4802290239201DB059A62A9 +:10091000002271E480229023D201DB059A6200223A +:100920006AE40122B74B9A62002265E40422B64BC6 +:100930009A62002260E490232022DB059A62002262 +:100940005AE4152B00D95AE2180003F0ADFE160048 +:100950001B002100580227002D00330058023A00E6 +:10096000400045004D005802580255005C006300ED +:100970006A0072007A00800086009023DB059A618D +:10098000002239E490230122DB059A61002233E43E +:1009900090230222DB059A6100222DE49023042299 +:1009A000DB059A61002227E490230822DB059A6187 +:1009B000002221E4802290239201DB059A6100222B +:1009C0001AE490234022DB059A61002214E40222FB +:1009D0008C4B9A6100220FE4802290231202DB05E7 +:1009E0009A610022FFF708FC802290239200DB0529 +:1009F0009A610022FFF700FC90231022DB059A6128 +:100A00000022FFF7F9FB90232022DB059A610022E8 +:100A1000FFF7F2FB90238022DB059A610022FFF7AB +:100A2000EBFB802290239201DB059A610022FFF705 +:100A3000E3FB80229023D201DB059A610022FFF7BD +:100A4000DBFB01226F4B9A610022FFF7D5FB0422EA +:100A50006D4B9A610022FFF7CFFB90232022DB052C +:100A60009A610022FFF7C8FB02226270152B00D9A1 +:100A7000B1E0180003F004FE0B151EAF273039AFAC +:100A8000434C545DAFAF677079828C969EA69023DD +:100A90008022DB051B69D200134063800022FFF730 +:100AA000ABFB90230122DB051B691340638000220E +:100AB000FFF7A2FB90230222DB051B691340638032 +:100AC0000022FFF799FB90230422DB051B691340EA +:100AD00063800022FFF790FB90230822DB051B694F +:100AE000134063800022FFF787FB90238022DB0501 +:100AF0001B699201134063800022FFF77DFB902366 +:100B00004022DB051B69134063800022FFF774FB62 +:100B100002223C4B1B69134063800022FFF76CFBF1 +:100B20009023DB051B690022DB0BDB036380FFF7EF +:100B300063FB90238022DB051B69920013406380D6 +:100B40000022FFF759FB90231022DB051B6913409D +:100B500063800022FFF750FB90232022DB051B69F6 +:100B6000134063800022FFF747FB90238022DB05C0 +:100B70001B69134063800022FFF73EFB9023802215 +:100B8000DB051B699201134063800022FFF734FBF1 +:100B900090238022DB051B69D20113406380002271 +:100BA000FFF72AFB0122174B1B69134063800022C9 +:100BB000FFF722FB0422144B1B69134063800022C1 +:100BC000FFF71AFB90232022DB051B69134063808B +:100BD0000022FFF711FB00238D226370FFF70CFB4F +:100BE00080230A4ADB0251690B435361054A0849D5 +:100BF00013680B401360D168064B0B43D36000228F +:100C0000FFF7FAFA00040048000C00480010024008 +:100C1000FFFFAAAA00005555D34AD44913680B40D8 +:100C20001360D168D24B0B43D3600022FFF7E4FA84 +:100C3000CD4ACE4913680B4013600022FFF7DCFA5F +:100C4000C94ACB4B11680B4313600022FFF7D4FA5B +:100C5000C5491B024A69D2B213434B610022FFF718 +:100C6000CBFAC14B00221B691B0AA37001236370DE +:100C7000FFF7C2FA8023BF4A1B0351690B4353613C +:100C8000BD4ABE4B11680B4313600022FFF7B4FA54 +:100C9000B94ABA4BD1680B43D3600022FFF7ACFAD4 +:100CA000B54AB74913680B4013600022FFF7A4FA56 +:100CB000B14AB24B11680B4313600022FFF79CFA54 +:100CC000AD4A53610022FFF797FA8023A94A1B031C +:100CD00051690B435361A44AAA4B11680B4313603B +:100CE0009022D2051168A84B0B4313600022FFF736 +:100CF00083FA9D4AA34BD1680B43D3609023DB0555 +:100D0000D868A1490143D9601168A0480140116029 +:100D10001A689F490A401A600022FFF76DFAF8220C +:100D20008027914D98026969D20110403F025A0212 +:100D30003A4089051043890D0843902168611020CD +:100D40005D08C90528404A69924DDB012A400243EB +:100D50008020C001034013434B610022FFF74CFA8F +:100D6000C023844ADB0251690B4353617E4A8A4B9C +:100D700011680B4313609022A023D20511685B0316 +:100D80000B4313600022FFF737FA774A824BD16892 +:100D90000B43D3609023A021DB05D86849030143AE +:100DA000D96011687D48014011601A687C490A4089 +:100DB0001A600022FFF720FAFF216B489D0042696C +:100DC0002940784DDB002A400A4342619022C0202E +:100DD000D205C00051690340734801400B43536181 +:100DE0000022FFF709FA8D22FFF706FA8D22FFF79E +:100DF00003FA8D22FFF700FA8D22FFF7FDF98D220D +:100E0000FFF7FAF9B578B388022D00D1D2E005D802 +:100E1000002D5FD0012D63D096255DE0042D00D11B +:100E20005DE100D219E1802DF6D190230127402108 +:100E30008025DB05677099621A686D012A431A6084 +:100E4000C0465A481C691A680C4002401A60DA68A9 +:100E50000240DA60F022002C39D11A6802401A6090 +:100E6000DA681543DD601A6994461A690492C0462F +:100E70001A690592C046C0461A690692C046C04625 +:100E8000C0461A690792C046C046C046C0461D69A2 +:100E90001A6802401A60DA681040D860634622007F +:100EA0000B4214D1049B3A000B4210D1059B023235 +:100EB0000B420CD1069B03320B4208D10B00079961 +:100EC0000432194203D105321D4200D1D132384BD0 +:100ED0009A7002E100F0B4FF354B1D70FFF78DF9F9 +:100EE00000F0AEFF9023DB051A68204C2A431A60FD +:100EF00080229D61196852030A431A6080220421EE +:100F0000D2009A621A6800250A431A6002229A6186 +:100F100018680E3202431A604022996119680A4328 +:100F20001A6008229A6180231249DB024A6913433E +:100F30004B610D4B1A6822401A60D8680C4A104366 +:100F4000D860186820401860D8680243DA608023AF +:100F50004A691B0313434B61074B084A19680A434C +:100F60001A605D61B8E7C04600040048FFFFAAAA06 +:100F700000005555001002400008004855555555D1 +:100F8000AAAAAAAA0000505500010010FFFFAFAAAC +:100F9000FFFEFFEFEFBF000050550000AFAAFFFFBC +:100FA000FFFFEBFF03FF0000FFF90000FFEFFFFF73 +:100FB000F406002000F044FF90230121DB051A68AD +:100FC000CE4D0A431A601022996119680A431A60CB +:100FD000042240219A611A680A431A6008229A6121 +:100FE00080229961196852010A431A608022C4491B +:100FF000D202486902434A61C24A10682840106020 +:10100000D468C1480443D46014682C401460D46888 +:101010002043D06080204C69000320434861BB48D6 +:10102000BB4C05682C43002504604561C0204C6919 +:10103000C002204348611068B64901431160A021F5 +:101040001868490301431960B3485169014051616F +:101050005A69B2490A405A613EE7DBB2022B1ED000 +:101060000025032B00D137E7012B6AD18022A44948 +:101070001203486902434A61A44A11689943116006 +:10108000D1681943D1605168194351609361116867 +:101090000B431360A24B1D70A24B1A601CE7B023D8 +:1010A000974A5B03516940200B4353619023DB0552 +:1010B0001A689D490A401A608022D968520111437A +:1010C000D960596801435960986119680A43082139 +:1010D0001A60934A1170934A13600025FCE6DBB254 +:1010E0009825012B00D0F7E6902106220A208F4B8D +:1010F000C90519608E4B1A70824B8E4A13608E4A56 +:1011000010708E4A013013608D4A10708D4A013084 +:1011100013608D4A10708020794A0003546920437F +:1011200050611C688948204318600868884B034355 +:101130000B60B02351695B030B43536100F0A4FDC6 +:10114000CBE79725C8E6B578F178B088062D2BD087 +:101150000FD8022D2FD005D8002D20D0012D27D05B +:10116000A0251EE0042D29D0052DF9D102F014F898 +:101170001CE0822D52D009D8802D23D0812DEFD1B3 +:101180000123637001F01AFEA0700FE0832D4AD096 +:10119000842DE5D10123637002F026F8F4E701F015 +:1011A00051FE2570FFF729F801F028FE0025F8E729 +:1011B00002F036F8FAE701F0CBFDF7E7002201F084 +:1011C000CFFFF3E7012290236270DB051968564DCB +:1011D00029401960D9682940D96080210225C900B9 +:1011E00099629A619D61494D6861C046C04600B2EE +:1011F0009961002800DA9A62C046C046C046C046DF +:10120000C046C046902280213E4BD205C9001B69D2 +:10121000916201211B0A9161A370C7E701236370EA +:1012200002F026F8B0E70123637080239027374946 +:101230001B014B61FF053B6980229BB218009200A5 +:101240001040844680204D69C000EDB228434861BB +:10125000396989B208000B4310401021134218D09D +:101260000200531E9A416346591E8B41D2B2DBB233 +:10127000002A02D01121002B0BD16146002902D196 +:101280001231002A05D1002802D11321002B00D1F0 +:10129000FF21A1708AE7B378B088012B21D0002B01 +:1012A00003D0022B18D0AA2313E0FF22154D87008C +:1012B00069693A40184FC00039400A436A61902179 +:1012C000C025C905ED004A690540144802402A437B +:1012D0004A612370FEF791FFF17801F0FBFE0023D5 +:1012E000F7E7637001F01CFFA070F8E7B278002AFE +:1012F00048D00023012AECD0AF23EAE7FFFFAAAAD7 +:101300000010024000040048000055550008004845 +:10131000555555555055000003FF0000FFF90000DA +:1013200000070020FC060020FFEFFFFF140700204D +:10133000180700200C070020100700201C070020C1 +:101340002007002004070020080700200000505557 +:1013500000010010B278002A14D00023012AB8D06E +:10136000B023B6E7B278002A0CD00023012AB0D00F +:10137000B123AEE7B278002A04D00023012AA8D016 +:10138000B223A6E701236370A933A370A7E7B5785A +:10139000F278B188112D00D19BE007D8012D6BD0D8 +:1013A000002D0FD0022D7DD08225FAE6212D00D10F +:1013B00085E0222D00D188E0122DF5D102231020E6 +:1013C000637089E001252900BE4ABF4F12783B684F +:1013D000914099625A6810208A435A6001F06EFE6B +:1013E0002900B84B3A681B78042799400B0091619B +:1013F000516804950B435360FA20400001F05EFEF3 +:10140000B04A04991278FA209140AF4D40002B6801 +:10141000013F99625A68BFB28A435A6001F04EFE9A +:10142000A84B04991B782A6899400B009161516878 +:101430000B435360002FDFD10425FA2001F03EFE5C +:101440000121A04AA04F12783B68914099625A68E6 +:10145000FA208A435A6001F031FE0121994B3A6823 +:101460001B78013D99400B0091615168ADB20B436F +:101470005360002DE1D194E62900924A924F1278F0 +:101480003B68914099625A6810208A435A6001F083 +:1014900015FE8C4A3B68127895409D615A68154349 +:1014A0005D6083E60123874A637012788749934021 +:1014B000854A9BB21268002001F0FAFF64E601231E +:1014C0000020637001F04AFD5EE601231020637086 +:1014D000F8E702230020637001F09AFD608065E662 +:1014E000B378B288042B1AD006D8022B1CD021D88E +:1014F000012B0FD08723ECE6072B24D003D8052B34 +:10150000F8D1734B14E0082B22D0802BF2D100F0DD +:10151000BBFBE4E66F4A1278A2706370DFE66E4BA5 +:101520001B78A3700123F8E76A4B1A7083226A4B79 +:101530001A70D4E6674B684D1A7083232B7000F045 +:1015400013FC2B78EDE7654B1A70120A5A70C6E649 +:10155000624B1A78A2705A78E2709A782271DA781F +:1015600062711A79A2715B79E3710623D5E7B378CA +:10157000B288022B15D0032B16D0012B1BD10248A9 +:1015800085460248001C004778120020C5CAFF1F8C +:10159000060005000800070019C9FF1FEFBEADDEF9 +:1015A0009DE64F4B1A609AE64D4B186800041043B5 +:1015B00001F076FF93E68A238BE6882389E6B278EA +:1015C0001300303B2F2B19D8F078032800D9EEE018 +:1015D00003F056F814021012424B512A00D197E042 +:1015E00024D8312A54D00BD8002A34D0302A4AD0FB +:1015F000B42346E03C4BF0E73C4BEEE73C4BECE7DA +:10160000332A4FD049D3502AF2D100222270063219 +:1016100062701A7AA270DA78E2705A7A22719A7A33 +:1016200062719A78A2715B7CE37146E07F2A00D9EF +:10163000A3E0702A00D37BE0602A36D0612A5FD015 +:10164000522AD5D100221B882270A37002321B0AB5 +:101650006270E37031E0FF23264953540132102AAF +:10166000FBD1204A2249D3709370204ACB70D370AB +:10167000937001228B701C49CB708B701E4B1A70BB +:101680000023237019E0B288110AD9721A73F7E7A0 +:10169000B288110A59739A73F2E7B288110AD973A2 +:1016A0001A74EDE7B2885A74EAE700232370013315 +:1016B0006370B3880F4AD35CA370104B1C60FEF7B5 +:1016C0009CFDC04600070020FC060020040002002C +:1016D000DD040020BC040020DE040020BD04002046 +:1016E00030040020480400205C0400207004002026 +:1016F00034040020DF0400209C0400202407002084 +:101700000023237001336370B84B1B68DB78D3E789 +:101710000022227006326270DA7AA2701A7BE270BE +:101720005A7B22719A7B6271DA7BA2711B7C7BE708 +:10173000AF4BAE495C6833787F2B00D936E1684601 +:10174000AC4B007A18700868C378002B0ED00020CC +:101750000290982B05D131E100200290D02B00D1CE +:101760002CE1A54B10301870FF2304E0A34B186048 +:101770009023C3706F33029320E1072010400328A9 +:1017800015D802F07DFF160218129D4B802A94D3C3 +:10179000872A12D97032D2B2072A8ED8002222703C +:1017A000F2789A72B2881A8087E7964BEEE7B523F3 +:1017B00067E78F4BEAE7944BE8E7B188F0780A0ACD +:1017C000C9B245189446BE22102D2DDC04320028E3 +:1017D0002AD0DD78033AFF2D26D19D780132FF2DE6 +:1017E00022D10022D5B2A84220D862464501013D4F +:1017F0001D724D012F009A700022844DDA70ED1990 +:101800005A729A721A80DA721A735A739A73DA7366 +:101810001A745A745D607E4B591863468B540132BA +:10182000D3B29842F9D80022227046E701328D18CF +:10183000774F013D7D5DFF2DD4D0C122F4E7B27812 +:10184000002A04D0402A07D0D222227036E7227024 +:10185000B188694A117031E700222270013262704A +:10186000654A1278A27029E7802332E5694A6A4BFB +:101870001A601223FEF7E0FCD2B2012A11D0002A2E +:1018800009D0022A01D0FEF7D7FC634B634A1A60E5 +:10189000634BFEF7D1FC604B624A1A600423FEF7EB +:1018A000CBFC5D4B604A1A60604BFEF7C5FC1342EF +:1018B00008D17378052B05D173885D4A13705D4A92 +:1018C000DBB21380019B5C4A1B88019913405B4A81 +:1018D00013439BB20B800021594B1980019B1B883D +:1018E0001A43584B1A40584B5A40019B92B21A80E7 +:1018F000564BDA8F520507D58021554A11800022B8 +:10190000DA87544B019A138009B0F0BD1278402A4F +:10191000EED1514A1278002AEAD1504A1088374A4B +:10192000C0B211684D7A4E68DAB25419E4B29042EE +:1019300018D84A7A82184A722E4A13781B1ADBB2D8 +:101940001370002B01D19833CB70019B1A883B4B4D +:101950001343434A1A40C0239B015340019A9BB250 +:101960001380C5E73F4A9A18127801333255DBE7F6 +:10197000019B1B881B06BBD5019B3B4A1B88134060 +:10198000802212021343019A1380384B1B78802B5C +:1019900001D1FEF762FC264A1378002BA8D08021E3 +:1019A0000B432B490B8000231370A1E70868C37811 +:1019B000D82B00D0D0E680234468C3700B68002188 +:1019C0005972DB78902B00D077E6712A00D074E64C +:1019D0000A4BB2881B6859680A70B2885968120AA3 +:1019E0004A705A7A02325A7267E6C046840400206E +:1019F000340400208C0400209C0400208804002073 +:101A000048040020700400205C040020F004002042 +:101A1000DF040020C44600082407002040470008D7 +:101A20001E030000E8460008EC4600082A030000F8 +:101A300094040020506000408F8EFFFF8080FFFFE5 +:101A400002600040BFBFFFFF30300000065C004076 +:101A50004C5C004020320000F1060020066000408F +:101A60008FBFFFFF486000400F8FFFFFF006002090 +:101A7000F0B5404B8BB0089119783F4B09921B7819 +:101A8000019002933D4B019D1C683D4B3D481A78E7 +:101A900001231E0096403C4AA662102D5ED11278AA +:101AA00000689340836201200200364B05901F6856 +:101AB000354B1B789A4003920200344B1B68069307 +:101AC000334B1B789A4093B202000793314B1B684B +:101AD0009C46314B1B789A40002304921A000198CF +:101AE000202806D1029D05981D4105423ED003984D +:101AF000B861089820280FD1002B01D11E488354CB +:101B0000069805690798054206D01B48855C05982C +:101B1000984005431848855409980139C9B20028EE +:101B200002D0002900D1A6616046049D0133DBB2DA +:101B300085618562082B05D101320F4BD2B29B5CC7 +:101B4000029300230029CAD10E4B1A680E4B197854 +:101B500001238B409362A6620BB0F0BD019D112D55 +:101B6000A1D112780068934083619CE70398B86222 +:101B7000BFE7C046DD040020BD0400201C07002094 +:101B8000200700200C070020100700201407002069 +:101B9000180700200407002008070020F7B51F4B96 +:101BA0001F491A781F4B10282ED101241E780D686A +:101BB000B440AC62012635000C6831001B780196F8 +:101BC0009D40194B1B680093184B1B7899400023CC +:101BD0008C46190020280DD1154E019F765C1E41C0 +:101BE0003E4219D0A5610133DBB2082B02D100239C +:101BF0000131C9B26646009F013AD2B2BE61BE62EF +:101C0000002AE7D1A562F7BD1128D3D101241E789F +:101C10000D68B440AC61CDE7A562E4E7DD040020C7 +:101C20001C070020200700200407002008070020D0 +:101C3000BD040020022907D10F4B104A984218D04A +:101C4000904209D1180007E0032906D10A4B0B493D +:101C50000B4A98420BD1080070470429FCD1064B6F +:101C6000064A984205D006499042F4D0054A884277 +:101C7000E6D11000F0E7C0463404002048040020FC +:101C80005C04002070040020F0B52C4B85B019686E +:101C90002B4B2C481B7800780193012302901E00E7 +:101CA00018001F00019A029C9640A040264D274A2A +:101CB0002D781268AF408E628446906224489D4021 +:101CC00000688762046803941C00AC402500039CF4 +:101CD000254305604568019CBD4345609C401D004F +:101CE000A54008681C00284308604868B043486065 +:101CF0001068029999408C402100014360461160B0 +:101D000051688143134851600078134A98408340DA +:101D100012681248116899431160D1680B43D3606F +:101D200080220F4B1A70002319000E4A13701A18E4 +:101D300001331170202BFAD105B0F0BD1C07002033 +:101D40002007002010070020080700200C070020B3 +:101D5000040700201807002014070020BD040020FD +:101D6000DE040020DD04002010B5334B1B78082B67 +:101D70005DD016D8314C032B44D007D8012B2DD081 +:101D8000022B31D0EE222D4B1A7023E0062B44D0CB +:101D900049D8042BF6D18123012223702021112060 +:101DA00027E00F2B34D008D8244C0D2B25D00E2B38 +:101DB000E8D181230022237027E0802B08D01F4C1C +:101DC000FF2B08D0102BDDD181230022237027E0C8 +:101DD000FFF75AFF10BDF0232370FBE7812320207B +:101DE0002370FFF7DBFE06E0812301220021237030 +:101DF0002020FFF73DFE8223EEE78123002223709F +:101E00001100F5E781230122237020211020F0E743 +:101E100081230A4C00222370C0E781230122237012 +:101E200020210800E5E7812310202370D9E78123D2 +:101E3000024C11202370D4E7BC040020DE040020F3 +:101E4000BC22444BD203996A70B50A439A629A6ADB +:101E50004149424C0A409A628022596912030A435E +:101E60005A613F4A3F4910683F4E0843106010686E +:101E7000204080241060D068E4020143D1605A6998 +:101E800022435A61394A116831401160D568384996 +:101E90000D43D560106830401060D0680143D160B8 +:101EA000B02158694903014359619023DB05196842 +:101EB0003048014019608021D8684903014301205E +:101EC000D960196881431960D9680143D960042138 +:101ED0001D688D431D60DD680D43DD6010251E68A3 +:101EE000AE431E60DE683543DD6040251E68AE43AC +:101EF0001E60DE683543DD601D681F4E35401D6085 +:101F00008025DE68ED043543DD601D681B4E3540DD +:101F10001D608025DE68ED053543DD601D68184EC7 +:101F200035401D60DD682C43DC601468154D84432A +:101F30001460D4682043D0601C682C401C60D868B2 +:101F40002840D86013688B431360D3681943D1606D +:101F500070BDC04600100240FFFFA1FFAAAAAAAAB6 +:101F60000008004855555555FFFFAAAA000400482F +:101F700000005555FFFFEFFFFFFFFFFBFFFFFFBF17 +:101F8000FFFFFBFFFFEFFFFF9022DA4B1203196800 +:101F9000F0B50A431A60802289B092021968114292 +:101FA000FCD0012259680A435A60802259685202C3 +:101FB0000A435A608022596852030A435A608022B9 +:101FC000196852040A431A60802292041968114267 +:101FD000FCD011210220C84A11605A680E398A4388 +:101FE00002435A601A6B7D310A431A638022DC690E +:101FF00012042243DA6162B6C04B4025DA8FC04C2E +:102000008243DA87DA8F01388243DA870022BD48BB +:10201000C2872280BC4C2580BC4C08352580802599 +:10202000BB4C6D012580BB4C2180C287BA49BB4A9D +:1020300011808021BA4A090611608022D98FD2000E +:102040000A43DA87B74AB84B1A80FFF7F9FEF02245 +:10205000B64B1A70B64E2023327811009943D2291C +:102060002ED1B449B448C978C3780224FF2904D1D9 +:10207000FF3B1C00631E9C41E4B2B04BDB78FF2B9E +:1020800000D00324AE4BDB78FF2B00D00424AD4BF3 +:10209000AD4F1C703860D22A12D10023012505E013 +:1020A0002100FFF7C7FD01230135EDB2A542F7D3AB +:1020B000002B00D0386080223B68DA70D023337068 +:1020C0003378F22B05D10022023B33709E4B1B6804 +:1020D000DA703578D02D01D000F0E3FD9A4E3068EB +:1020E000C378802B01D000F0DCFD964B1978FFF708 +:1020F000A1FD002330600400C57006884372C07AD9 +:10210000F5B21038042801D900F0C9FD02F0CCFA6C +:1021100005006E0028012C01E700E27B012A0DD1A9 +:1021200080201021000201F01BF80F21E020B609E9 +:10213000F6B231400022000201F012F8E37B032BDB +:102140000FD120883D3380099D43804BC1B2C0B27E +:10215000C01880B200F0FCFD8021237AA2782943C8 +:1021600034E01E2B07D1C0202188223389099D43EA +:10217000C9B20002EEE7222B01D00B2B07D1208839 +:10218000C009C1B2C0B26C3880B200F0E1FDE37B9F +:102190001C2B11D1A0208121C001268800F0D8FD80 +:1021A0008020F609F6B23100000200F0D1FDA02037 +:1021B0000021C00100F0CCFD8023E27B5B421F2A9E +:1021C00008D01D43EDB22900237AA278606801F09F +:1021D000FDF883E07022A0202188954309091D4362 +:1021E000C9B2C001EDB200F0B3FDECE7E37B002B18 +:1021F00006D1237AA2782900606801F01DF9607287 +:10220000E37B0B2B0FD12188514849090901C9B241 +:1022100000F09EFD1F231D40A278237A29006068EC +:1022200001F00AF96072E37BFE2B3ED12188494818 +:102230004909C9B200F0F4FF1F231D40237AA17899 +:102240000293454B28025A696768D2B202435A6129 +:1022500080209022C000D20590610120FF2690626C +:10226000033090625A69360232400A435A61C046CE +:102270003A4800228446C046604600690131000A9F +:10228000B8545869C9B230400843586101320298C5 +:10229000D2B29042EFD290230421DB0599618021D4 +:1022A000C9009962012199616272E27B012A16D10B +:1022B000802010210002268800F052FF1F21A0205C +:1022C0003609F6B231400022000200F049FF0F212A +:1022D000237AA2782940606801F0AEF860721A4B48 +:1022E0001B6819889A7A52181A80D822DA7000F07E +:1022F000D8FCC0460010024000200240025C0040B2 +:10230000505C0040065C00400060004004600040FB +:10231000066000404C5C004020320000005C004041 +:1023200000E100E00080FFFF585C0040DE04002078 +:102330009C04002048040020340400205C04002099 +:1023400070040020280700208404002069FDFFFF9E +:10235000FFFF0000FF3F00000008004800040048A5 +:10236000237AA2786021FAE6E37B002B4BD18033FD +:10237000F6091D43F3B20393FF27DE48039B42692E +:10238000DD499B000A403B4013434361039B902679 +:10239000D900C023F605DB0072690B40D7490A401B +:1023A000134373616368A2789C46237A0293D44BEB +:1023B00059690F402902394359610421B162033937 +:1023C000B162FF265969360231401143596100213B +:1023D000C046C046C046C0466746056901322D0A60 +:1023E0007D545D69D2B2354015435D610131029D76 +:1023F000C9B28D42ECD290230422DB059A61033AE4 +:102400009A6161726BE7012BB6D14021B604B60E1A +:1024100031430391B0E7E37B002B09D18020029B7D +:10242000B84A1843B84BB9490093230000F03CFF69 +:10243000E27B012A1BD18020238810219B051B0FE2 +:102440000002049300F08CFEE020002204990002B8 +:1024500000F086FE8023029A657A13431B021BB2AA +:10246000AFB20793237ABB4200D3EBE06572E37B04 +:10247000032B0ED1029A3C331A401300802220888D +:10248000134302938009C0B29F4B2200029900F0CF +:102490003FFFE37BFD2B0ED1029ABE3B1A40130097 +:1024A00080222088134302938009C0B2984B2200F7 +:1024B000029900F02DFFE37B1E2B15D1029A2133E8 +:1024C0001A40130080221343029323889B09DBB236 +:1024D0000693029B657A1B021BB2AFB20793237A65 +:1024E000BB4200D322E16572E37B222B01D00B2B90 +:1024F00011D12088C009C1B2C0B26C3880B200F0DE +:1025000027FC8020029B7F4A18437F4B7F49009322 +:10251000230000F0C9FEE37B0C2B1AD1029A13337F +:102520001A401300C0208022258813436D09A5217D +:10253000C001EDB2029300F00BFC2900754800F0D9 +:1025400007FC754B754A009375492300029800F00B +:10255000ABFEE37B1C2B3AD1A02023888121DB0931 +:10256000DBB2C001049300F0F3FB80200499000269 +:1025700000F0EEFBA0205421C00100F0E9FBAA21ED +:102580006848677A00F0E4FB5521674800F0E0FBFB +:102590002021644800F0DCFB8023029ABEB2134382 +:1025A0001B021BB20793237AB34200D30CE18020B5 +:1025B00090210002677200F0CBFB80200021000216 +:1025C00000F0C6FB8020F021000200F0C1FBE37B9D +:1025D0001F2B30D1A0202188C0010909C9B200F009 +:1025E000B7FBAA214F48657A00F0B2FB55214E484F +:1025F00000F0AEFB20214B4800F0AAFB7023029AAA +:10260000AFB29A43F03B13435BB21B020493237AAD +:10261000BB4200D31EE1802090210002657200F0D1 +:1026200097FB80200021000200F092FB8020F02127 +:10263000000200F08DFBF4232288E370A37A9B183C +:10264000238050E3802000221021000200F088FD4A +:10265000AA21334800F07CFB5521304800F078FB7C +:10266000A0212F4800F074FB079E63682E43B6B28A +:10267000595D300000F06CFB802001221021000227 +:1026800000F06EFDE02000220499000200F068FDD9 +:10269000C046300000F092FB0690300000F08EFB48 +:1026A000069B8342F4D16368069A5B5D114E9342A8 +:1026B0000DD10423326801359A433260F268013744 +:1026C0001343F3600223EDB2BFB2B362CAE68020C7 +:1026D00001221021000200F043FDE02000220499B5 +:1026E000000200F03DFD04233268134333600223EF +:1026F000B361B7E60004004803FF0000FFF90000E3 +:1027000000080048AA2A0000452E00085555000080 +:10271000FD2D0008FFFF0000512D0008AAAA0000AF +:1027200055D50000AA8A000055850000C02001216F +:10273000000200F00DFBAA21E04800F009FBC020D8 +:102740000021000200F004FB5521DD4800F000FBF1 +:10275000C0200121000200F0FBFAA021D74800F0C0 +:10276000F7FAC0200699000200F0F2FA079E6368AB +:102770002E43B6B2595D300000F0EAFAC046300090 +:1027800000F01CFB0490300000F018FB049B834217 +:10279000F4D1636804995A5DCA4B8A420DD1042270 +:1027A0001968013591431960D96801370A43DA6025 +:1027B0000222EDB2BFB29A6291E6042219680A437E +:1027C0001A6002229A618AE6A0205421C00100F01A +:1027D000BFFA079DA0213D43ADB2280000F0B8FA32 +:1027E00063682800D95D00F0B3FAC046280000F005 +:1027F000E5FA0690280000F0E1FA069B8342F4D146 +:102800006368069ADB5DAF4D93420DD104232A68BD +:1028100001379A432A60EA6801361343EB600223CA +:10282000FFB2B6B2AB62BEE6A0208121C00100F0CB +:102830008FFA80200499000200F08AFAA020542127 +:10284000C00100F085FA04232A6813432B60022399 +:10285000AB61A8E6049EA0212E43B6B2300000F082 +:1028600077FA63683000595D00F072FAC0463000B4 +:1028700000F0A4FA0290300000F0A0FA029B83421C +:10288000F4D1636802995A5D8E4B8A420DD10421BE +:102890001A6801358A431A60DA6801370A43DA6038 +:1028A0000222EDB2BFB29A62B1E604211A680A436D +:1028B0001A6002229A61AAE6E37B002B09D1029BEF +:1028C000657A1B021BB2AFB20693237ABB4243D296 +:1028D0006572E37B0B2B10D1029A14331A402388C4 +:1028E00002925B091B01657ADBB206931302AFB259 +:1028F0000793237ABB4269D26572E37BFE2B00D03B +:1029000099E6218870484909C9B200F089FCAA21DA +:102910006E48657A00F040FC55216D4800F03CFCA3 +:1029200020216A4800F038FC1F23029AAFB21A40F7 +:1029300013020493237ABB4200D395E06572902181 +:10294000002000F029FC0021080000F025FCF02107 +:10295000002000F021FC6EE6AA215E4800F060FC39 +:1029600055215A4800F05CFCA0215A4800F058FC60 +:10297000069E63682E43B6B2595D300000F050FCED +:10298000C046300000F074FC0490300000F070FC91 +:10299000049B8342F4D1636804995A5D494B8A428F +:1029A0000DD104221968013591431960D9680137A6 +:1029B0000A43DA600222EDB2BFB29A6285E70422CE +:1029C00019680A431A6002229A617EE7802020215A +:1029D000000200F0BDF9AA213E4800F021FC802051 +:1029E0001021000200F0B4F95521384800F018FC1D +:1029F00080202021000200F0ABF9A021354800F032 +:102A00000FFC80200699000200F0A2F9079E63687F +:102A10002E43B6B2595D300000F002FCC0463000D3 +:102A200000F026FC0490300000F022FC049B83425E +:102A3000F4D1636804995A5D224B8A420DD1042275 +:102A40001968013591431960D96801370A43DA6082 +:102A50000222EDB2BFB29A624BE7042219680A4320 +:102A60001A6002229A6144E7049EA0212E4330009E +:102A700000F092FB63683000595D00F08DFBC046AA +:102A8000300000F0B1FB0290300000F0ADFB029B83 +:102A90008342F4D1636802995A5D0A4B8A421BD182 +:102AA00004211A6801358A431A60DA6801370A433B +:102AB000DA600222EDB2BFB29A623BE755950000A0 +:102AC000AAAA000000040048FF3F0000AA0A000074 +:102AD000550500005515000004211A680A431A60C4 +:102AE00002229A6126E7E27B002A50D1D9B28032D5 +:102AF000DB091143DBB202910593824DFF266A691F +:102B00008149C0200A409021059BC9059B003340A4 +:102B100013436B61059BC000DB004A6903407B489F +:102B2000024013434B61677AC046C046C046C04668 +:102B3000C046C046C046C046C046AA21744800F000 +:102B4000C9FA5521734800F0C5FA2021704800F0F9 +:102B5000C1FA029B06961B021BB20793FBB20293BB +:102B6000237ABB421BD26B4680201B7A9021637272 +:102B7000000200F0AFFA80200021000200F0AAFA63 +:102B80008020F021000200F0A5FAC04653E5012A9A +:102B9000B3D19B049B0E3F321A430592ADE72A68DE +:102BA0005D4B082113432B60069A6B691340A022EA +:102BB000120213436B6190230122DB0599629A6232 +:102BC000C046C046C046C04699619A612B68534AC8 +:102BD000069E13402B60079B3E40029A1E4363688B +:102BE000B6B2995C300000F075FAC046C046C046E7 +:102BF000C046C046C046C046C046C046C04630007B +:102C000000F08EFA0490C046C046C046C046C0469A +:102C1000C046C046C046C0466368029A9B5C834279 +:102C200017D0C046C046C046C046C046C046C04693 +:102C3000C046C046300000F073FA049B98420BD1A6 +:102C4000C046C046C046C046C046C046C046C04654 +:102C5000C0460137BFB281E7C046C046C046C04645 +:102C6000C046C046C046C046C046C046C046C04634 +:102C7000C046C046C046C046C046C046C046C04624 +:102C8000C046C046C046C046C046C046C046C04614 +:102C9000C046C046300000F043FA0490CAE7C323A0 +:102CA000E3701F4B1D78F02D1DD11E4E3468E37864 +:102CB000982B18D11C4B20001978FEF7BBFF00237E +:102CC0003060C3702388E570DAB20292E07A10387F +:102CD000042806D801F0DEFC9FFBF0FDAFFC07FFE7 +:102CE000AFFCC323E370114B1B78F02B01D1FFF72E +:102CF000B1F9832B01D0FFF7ADF9FFF735F8FFF7F6 +:102D0000A9F9C0460004004803FF0000FFF90000D5 +:102D1000AA8A00005585000000005555FFFFAAAAA9 +:102D20009C0400208404002028070020DE040020EA +:102D3000002302000002002A04D1002B01D08023CE +:102D400018437047DB43511EDBB20A40F3E7000033 +:102D50009023DB0530B51C68134D09022C401C6024 +:102D6000DA68124C2A40DA60114A506102229A62F3 +:102D7000104A00B215682C4314605469E4B2214330 +:102D800051618021C9009961002801DA012098620F +:102D9000C046C0469962012199614918996113683A +:102DA00005490B40136030BDFFEFFFFF0000555594 +:102DB0000008004800040048FFFFAAAA0D4B80222B +:102DC00058619023D200DB0500B29A61002801DA35 +:102DD00001229A62C046C046C046C046064B8022C9 +:102DE00018699023D200DB059A620122000AC0B262 +:102DF0009A61704700080048000400480D4B0E4AD5 +:102E000058610E4B0902186802431A605A69D2B21F +:102E10001143902259618021D20510684901014374 +:102E200011604021916291611A6805490A401A6057 +:102E30007047C0460008004800005555000400488F +:102E4000FFFFAAAA104B114A10B558611068104B29 +:102E500009020343136053690E4CDBB219439023FC +:102E600051618021DB051868490108431860402042 +:102E70009862186820401860D8680143D9601368C8 +:102E800005490B40136010BD0008004800040048CD +:102E900000005555FFEFFFFFFFFFAAAA224B10B518 +:102EA0001968224B224C1A8852085200505A214A63 +:102EB00010801A88023292B21A8052085200505A78 +:102EC0001D4A10801A88023292B21A8052085200AB +:102ED000505A1A4A10801A881948023292B21A803F +:102EE00052085200515A174A11801A88218802321A +:102EF00092B21A808A4210D908318A1A92B202809C +:102F000022881A801049114B0A881343104A1A402C +:102F1000302353409BB20B8010BD0E4C21888A4257 +:102F2000EAD808230380EDE7240700209A04002054 +:102F3000980400204060004042600040446000402F +:102F40000260004046600040005C00408080FFFF5F +:102F5000BF8FFFFF96040020FEE70000F7B50123B6 +:102F60000225294F01923A780091054393400421AC +:102F7000A020264E2D049BB229433268C00100F0E8 +:102F800097FA040001283DD13B7809209C40054375 +:102F90007830A3B232682900FF3000F089FA0400CB +:102FA00001282FD13B7832689C402900A3B2002031 +:102FB00000F07EFA0400012824D1009B180AFFF7D4 +:102FC000B7FE3B7832689C402900A3B200F070FA4B +:102FD0000400012816D16B461878FFF7A9FE2200DD +:102FE0003B7829009A4093B2326800F061FA019868 +:102FF000FFF79EFE3B7832689C402900A3B200F0A8 +:1030000057FA0400E0B2FEBD00070020FC060020D5 +:10301000F7B501230225274F00903A780191054327 +:1030200093400421C020244E2D049BB229433268D2 +:10303000800100F03DFA0400012838D109231D4326 +:103040003B78C0209C403268A3B22900400000F0C9 +:103050002FFA040001282AD13B7832689C402900CD +:10306000A3B2002000F024FA040001281FD1019B24 +:10307000180AFFF75DFE3B7832689C402900A3B236 +:1030800000F016FA0400012811D16B461879FFF7F9 +:103090004FFE22003B789A4093B2009A14430922D3 +:1030A000E1B209041143326800F002FA0400A0B250 +:1030B000FEBDC04600070020FC0600200023800063 +:1030C00080B2834200D17047C046C04601339BB2F4 +:1030D000F7E700000E4B0F4A58610F4B09021868C2 +:1030E00002431A605A690820D2B2114390225961F2 +:1030F0000121D20590629162C046C046C046C046DA +:10310000906191611A6805490A401A607047C0468B +:10311000000800480000555500040048FFFFAAAA17 +:103120000D4B0122586190230421DB059A629962BC +:10313000C046C046C046C046C046C046C046C0465F +:10314000C046C046C046C046C046044800699961B2 +:10315000000AC0B29A6170470008004800040048A5 +:1031600070B506000D00002A08D080200002FFF78D +:1031700025FE802080210002FFF7EAFD05243000B3 +:10318000013CFFF71BFEE4B229003000FFF7E0FD31 +:103190006D08002CF3D170BD0F4B30B590225861F3 +:1031A00080230124D205DB0093620C4B94621D68DE +:1031B0000B480902284318605869C0B2014359619D +:1031C000C04608219162C0469161196805480140D6 +:1031D0001960946130BDC0460008004800040048F2 +:1031E00000005555FFFFAAAA0B4B10B5802158616E +:1031F000902301220424DB05C90099619A629C6234 +:10320000C046C046C046054800699C61000A9962F4 +:10321000C0B29A6110BDC0460008004800040048D2 +:103220000E4B984202D880231B0218430C4B0D4AC8 +:1032300058610D4B0902186802431A605A69D2B2EC +:1032400011435961C04690220821D2059162C046BF +:1032500091611A6805490A401A607047FF1F000013 +:10326000000800480000555500040048FFFFAAAAC6 +:103270000A4B984202D880231B021843084B0422B1 +:1032800058619023DB059A62C046C046C046C046DE +:10329000044908699A61000AC0B27047FF1F000024 +:1032A0000008004800040048F0B585B00191039281 +:1032B00000025E7A1D0003B202932B7AF7B2B3428A +:1032C00003D200206F7205B0F0BDFF24AA2101983F +:1032D0000A9B9847552103980A9B9847A02101987B +:1032E0000A9B9847029B34401C436B68A4B2D95D8B +:1032F00020000A9B9847C0462000FFF75FFD0700AB +:103300002000FFF75BFD8742F5D10136B6B2D4E766 +:10331000F0B5150085B00190547A09021E000BB279 +:10332000A7B203932B7ABB4203D200206C7205B084 +:10333000F0BD00212048FFF70BFDAA211F48B04730 +:1033400055211F48B047A0211C48B047019B1D4A8A +:103350001900981880B2FFF7FBFC039B23439BB234 +:1033600000936B680098195DB047C0460098FFF75E +:1033700025FD02900098FFF721FD029B8342F4D1C6 +:103380006B6802991A5D104B8A420DD104221968AC +:10339000013491431960D96801370A43DA60022287 +:1033A000E4B2BFB29A62BDE7042219680A431A6008 +:1033B00002229A61B6E7C04669FD0000555500003B +:1033C000AA2A000069FDFFFF00040048F0B5184C70 +:1033D000050060690E02C0B2304360618026902013 +:1033E000F600C00549B28661002901DA0121816237 +:1033F000FF2661693602314011436161C0460020F9 +:103400000C4FC04639690132090A29546169D2B2A8 +:10341000314001301143C0B261619842F1D990232B +:103420008022DB05D2009A6201229A61F0BDC0467B +:103430000008004800040048F0B5174C05000E00D5 +:1034400060691F2925D8802131430902C0B2014398 +:10345000616190210420FF26C905886261693602F6 +:10346000314011436161C04600200C4FC0463969AC +:103470000132090A29546169D2B231400130114345 +:10348000C0B261619842F1D990230422DB059A61B0 +:10349000F0BDC0B20902DAE70008004800040048A5 +:1034A0008047C0460000000000000000000000004F +:1034B000F0B5474680B4061C081C000C102801D546 +:1034C000162700E004270007000F8046FF20014078 +:1034D0005468251C1D439C43F60313850AD5C0463A +:1034E000C046C046C046C046C046C046948013830E +:1034F000958002E0012000F081F801390AD4381CDF +:1035000000F07CF8C046948013839580C046C04686 +:103510007600E2E7381C013800F070F894801383DD +:103520009580042000F06AF8108A184001D0FF202E +:1035300061E0C046C046C046C046C046C046948012 +:103540009580108A184055D001200226B04552D0EF +:103550000921168A1E40FCD1012000F04FF894800A +:10356000C0469580C04603E0C046C046C046C0463F +:10357000948095807600108A1840EFF30080400018 +:10358000C00F0643381C023800F038F8948095804C +:10359000022000F033F80139EAD513859480012028 +:1035A00000F02CF813839580301C80210223994071 +:1035B0000E401BD1002341085E4149085E41490885 +:1035C0005E4149085E4149085E4149085E4149083B +:1035D0005E4149085E4149085E41760808D34008CB +:1035E000FF21084048400002013004E00E2002E0C4 +:1035F000092000E0002080BCB846F0BD0138FDD1B4 +:103600007047C04603685A0003D45B005B08C018CB +:103610007047802212061343F9E7C046F0B55746BB +:103620004E46DE464546E0B5814683B092460029C7 +:1036300025D04B1E9B46002701935B46FB18DC0FF1 +:10364000E4184B466410E5005E193000FFF7DAFF1E +:10365000019B8046A3420BD0280008304844FFF766 +:10366000D1FFD04506D80138504509D2671CE4E7A0 +:10367000504505D9A74202D0631E9B46DDE70026D0 +:10368000300003B03CBC90469946A246AB46F0BD24 +:10369000012809D0022805D0002801D00020704759 +:1036A0000248FCE70248FAE70248F8E7B13D0008A3 +:1036B000C93D0008BD3D000830B5234B83B005006F +:1036C0008C1E002B2AD001A9200000E000BF00289A +:1036D00020D001992200FFF7A1FF041E1AD0FFF7A6 +:1036E00091FF6368A864012B10D0201D002B1BDB09 +:1036F000FFF788FF0023E8642B650368002B17DBC6 +:10370000FFF780FF2861002003B030BD00230520B3 +:103710002B61F9E7002309202B61F5E70B480C49E1 +:10372000091AC9100191D5E70123E8642B65E4E784 +:103730001801000FFFF7ACFF2861002801D1093004 +:10374000E2E70020E0E7C04600000000AC470008C8 +:103750007C480008036810B50400DA0705D49B070D +:103760000FD5483000F084FC23685A070FD51A079C +:1037700014D5DB0604D42000D130FF3000F084FCE7 +:1037800010BD483000F070FC23685A07EFD42000C9 +:10379000D03000F071FC23681A07EAD420005130C1 +:1037A000FF3000F06DFC2368E3E7C0460368002BA0 +:1037B00000D01B1818007047092070477047C0469A +:1037C00070B504000D0008E02B6C2A006361210035 +:1037D000012023699847082807D1296C2000FFF7AA +:1037E0006BFF0028F0D000F09FFE0728FBD10020DF +:1037F000296CFFF7E3FF281D00F020FCF0B5CE4652 +:10380000474680B5C368324C9846A5448369060094 +:1038100014000431402205A8994600F08DFE0023D3 +:1038200004AD296C30000493FFF746FF631E9C41F2 +:1038300007000934002F15D0AB6B10216B644B4689 +:1038400021430193C9B20095330032000120C047E3 +:10385000002833D13800F5239B009D440CBC9046D2 +:103860009946F0BDF0222B6C5200736129007CA8B0 +:1038700000F062FE7CAA31003369200098478A9BE1 +:1038800007006B6403934B460095019332003300AD +:1038900021000120C047002810D1F0227CA952004D +:1038A000280000F049FE082F06D1296C3000FFF7F0 +:1038B00003FF09240700BDE7072F01D00927C9E747 +:1038C0000020296CFFF77AFF05A800F0B7FBC0467F +:1038D0002CFCFFFF406C704770B5CB6BFAB00B64EB +:1038E00004000E004022043103A800F025FE01234D +:1038F0005B42029306E002AA210023699847050073 +:1039000008280AD1129B200019000193FFF7D4FE6A +:103910000028F0D009207AB070BD02A8FFF71AFF86 +:10392000062DF7D131002000FFF74AFF10B5826164 +:10393000DA6BC1601A6419000022FFF75FFF10BD47 +:10394000436970B50B64C36804000D00002B04D0FC +:103950000122FFF753FF00F0E7FD0A002369010091 +:1039600002209847072807D0082803D12900200003 +:10397000FFF726FF00F0D8FD0020296CFFF71EFF9F +:10398000281D00F05BFBC046C36810B5002B05D0B6 +:10399000CB6B00220B64FFF731FF10BDFFF79CFFDC +:1039A000FBE7C0467047C046836810B5002B02D0C5 +:1039B00001000120984710BD10B5012907D000294A +:1039C00007D003390224012901D9200010BD0124A8 +:1039D000FBE70224002BF8D10F2AF6D892008218B8 +:1039E0005268029B00241A60EFE7C04600B585B01C +:1039F00003AB0A00009300210023FFF7DDFF0398CB +:103A000005B000BD10B5012907D0002907D0033942 +:103A10000224012901D9200010BD0124FBE7022462 +:103A2000002BF8D10F2AF6D8029B92001B6882184F +:103A300053600024EFE7C04600B585B003AB0392A6 +:103A400000930A0000230021FFF7DCFF05B000BD52 +:103A500070B51A4CD36BA544136406000D0019A869 +:103A6000111D402200F068FD01235B42189314E011 +:103A70000C2118A802AAFFF7DFFF290018A8B047F9 +:103A8000002812D1069B18AA02A908300193984772 +:103A9000040005280AD0092807D0289B02A819008D +:103AA0000193FFF709FE0028E2D0092418A8FFF7C8 +:103AB00051FE200090239B009D4470BDC0FDFFFF80 +:103AC000F0B5DE464E464546574693460322E0B5DE +:103AD0001E0013008BB003400193CB6C0D001C1D26 +:103AE0001B6808940793002E66D11B02079306AB50 +:103AF0005E731A73019B022B00D16EE02B6DDB0706 +:103B000047D40023A846B2460293083303400393E8 +:103B10002568002D00D137E15346022B49D0258876 +:103B2000668804340123370099469F4343469B6CC3 +:103B30000F219C4658466744FFF758FF00228742F2 +:103B400006D82A004B469A43D719B84280414242D0 +:103B500002230121760033400D402B43012B3ED040 +:103B6000002B5AD0022B1CD1236801995F007F08DB +:103B7000002965D1002A06D0039A002A00D188E0E6 +:103B8000002F00D1AAE0002B65DB0137BF00E4194C +:103B9000BEE700230293022E47DDFFF70DFE00284B +:103BA00049D009200BB03CBC90469946A246AB4692 +:103BB000F0BD66680834B5E7022E9BDC1A0C1B04C6 +:103BC0000793022306A90B73FD3313409B00E418EF +:103BD000019B4A73022B00D090E7AC6B8EE7019BF0 +:103BE000002B3AD1002A16D02368DD0F63689A1C97 +:103BF000D7D0424658320692013300D1C6E0201D8C +:103C0000FFF7D4FD06AB01002A00404600E000BFEC +:103C1000002800D0A7E008347AE7019B002B02D0EF +:103C2000002A00D08BE0043472E707A9584600F060 +:103C3000D1FA0028B5D1029B002B5DD10820B1E755 +:103C400043460D2158461D6AFFF7D0FE854263D0DA +:103C50002368002B99DA043497E743460D21584630 +:103C60001D6AFFF7C3FE8542D5D143469B6A9C423D +:103C7000D1D145462000FFF7C5FC0F210200584670 +:103C8000FFF7DAFE58462A000021FFF7D5FE07208D +:103C900088E7002F22D058235146434406AABA464B +:103CA000251D0026049405911F00914603E004356C +:103CB0002600A24514D028000697FFF777FD4B4653 +:103CC000010000224046741C00E000BF0028EED036 +:103CD0005746059B049C9A46B742B9D1454601E038 +:103CE0004546049C0D215846FFF780FE069B28623E +:103CF0006B62AC62062055E70F215846FFF776FE4F +:103D00000E2102005846FFF797FE5846274A0F211A +:103D1000FFF792FE072045E743469B6A9C4297D1F6 +:103D2000434642469F620023D36204331363231D3C +:103D300053632368002B32DB0123029325E7200025 +:103D4000FFF760FC454604340600AC63404600E0E3 +:103D500000BF002800D124E7584632000F21FFF7AA +:103D60006BFE07201EE707000D2158464546FFF76A +:103D70003DFE2862022F0FD1069BEB6243462C3397 +:103D80006B62AC6206200DE7564604E70D215846EB +:103D90004546FFF72BFE2862069B6B62F1E7380071 +:103DA000013080004546201865E7C046000000004D +:103DB00010B50023FFF784FE10BDC04610B50123E7 +:103DC000FFF77EFE10BDC04610B50223FFF778FE58 +:103DD00010BDC046F0B5CE46474680B50600C3B01C +:103DE00014001D0001294ED0002933D003290AD028 +:103DF000042902D1002B00D189E0022043B00CBC81 +:103E000090469946F0BD032BF7D11404150C240CF1 +:103E10002B19102BF1D8082203681A4200D0E7E0D2 +:103E200020AB1800984600F02DF9B36BED001A0096 +:103E3000002C09D0E400EA1A1C1942441968D15038 +:103E400004339C42FAD12200B263404600F018F9D4 +:103E50000020D3E70220002BD0D10023012710043B +:103E6000B56B000C321D39009940084202D0296818 +:103E70000435116001330432102BF4D10020A30467 +:103E8000BCD4B563BAE71404170C240C012B5FD023 +:103E9000052BB2D13B19202BAFD80F2F7DD9A146CE +:103EA000002C65D1002223009146B16B002B00DC71 +:103EB00088E020A88046FA00DB00521ACB18424462 +:103EC0000868505004318B42FAD119004B46002B40 +:103ED00010D04B4658003A00102F00D21022002379 +:103EE000103AD2006A448000CC58D4500433834244 +:103EF000FAD1C918012D5ED0B1630F2F74D94B468A +:103F0000002BA5D0684600F0B7F8002076E7102A0D +:103F100000D972E7102203681A4245D120AB18007D +:103F2000984600F0B3F800230120B16B02009A40DC +:103F3000144204D045460F689A00AF500431013353 +:103F4000042BF3D14046B16300F09EF8002055E702 +:103F50003B19102B00D950E70F2F00D94DE7002354 +:103F60009946012233681A4230D14B46002B5AD071 +:103F7000042233681A4242D1012D47D00F2F06D8B0 +:103F800020AB180000F076F84B46002B8AD068462C +:103F900000F074F81023DB1B87E7102BDFD9102209 +:103FA000524291469944DCE793430360D130FF309D +:103FB00000F06CF8B2E7043120A8B16300F054F8C7 +:103FC00000201BE74B46002B84D193E71900914357 +:103FD0000A003160052D1ED0032230009343336068 +:103FE000483000F043F8C0E720A800F041F886E729 +:103FF000934303605130FF3000F044F810E7300085 +:1040000093433360D03000F039F8B5E720AB1800A7 +:1040100000F02CF8BEE7022330001A43326048302B +:1040200000F028F8A1E7012D03D00F2F00D939E7C0 +:10403000A6E720AB180000F019F833E7011C343173 +:1040400038C9043B9C461D60A646011C20313CC972 +:1040500090469946A246AB46011C0831FCC941680E +:104060000068E54600BDC0467047C0467047C04680 +:104070007047C0467047C0467047C0467047C0464C +:104080007047C0467047C0467047C0467047C0463C +:1040900001B401A801B585B0FFB408A841464A465D +:1040A00053465C4665463EC001A83EC80F98009046 +:1040B00000230CB401A9FFF70FFC109B12B01847A6 +:1040C00001B401A801B585B0FFB408A841464A462D +:1040D00053465C4665463EC001A83EC80F98009016 +:1040E00000230CB401A9FFF72BFC109B12B018475A +:1040F00001B401A801B585B0FFB408A841464A46FD +:1041000053465C4665463EC001A83EC80F980090E5 +:1041100000230CB401A9FFF737FC109B12B018471D +:1041200001B401A801B585B0FFB408A841464A46CC +:1041300053465C4665463EC001A83EC80F980090B5 +:1041400000230CB401ABFFF7F1FB109B12B0184732 +:1041500001B401A801B585B0FFB408A841464A469C +:1041600053465C4665463EC001A83EC80F98009085 +:1041700000230CB401AAFFF76BFC109B12B0184788 +:10418000027A0300002A04D1427AB020002A07D123 +:104190007047013A02720268100E12021A60F7E7C5 +:1041A000013A5A725A68111D596003211268197236 +:1041B000F2E7C04600B585B003AB00930C220023A4 +:1041C0000021FFF7F9FB039805B000BD10B5FFF71C +:1041D000F1FF10BDF0B557464E464546DE4600237A +:1041E000E0B587B003930F339846083B9946802388 +:1041F0001B0306000F009A463800FFF7C1FF0400BA +:10420000B02821D0030632D4FF2583001D4005AB22 +:104210009B4600930D220023002130000435FFF758 +:10422000CBFB63064CD5059B5D1B05955B46009358 +:1042300000230D2200213000FFF7E4FB3800FFF7D8 +:104240009FFF0400B028DDD1039B0024002B2FD159 +:1042500005AD00950E2200213000FFF7ADFB009563 +:1042600000230F2200213000FFF7CCFB20E00300E9 +:1042700042469343DBB2802B63D0902B25D0A02BFA +:1042800032D0B02B45D0C02B00D173E003004A469A +:104290009343DBB2D02B0AD15346024001321A437A +:1042A000052301213000FFF795FD0028A4D0092443 +:1042B000200007B03CBC90469946A246AB46F0BDF4 +:1042C000059B9C4665440595B0E7833B03400D2B59 +:1042D000EDD0424605AD024000950023002130009C +:1042E000FFF76AFB0095A3E7FF234A461B0119006D +:1042F000824311410A001A40030702D58023DB01E3 +:104300001A43002300213000FFF764FD0028CED1BE +:1043100072E7B1284AD0B2285ED0B32800D18BE032 +:10432000FC230340B42BC2D04A465346024001321C +:104330001A43012101233000FFF74CFD0028B6D1BC +:104340005AE704023800FFF71BFF802520432D02A7 +:10435000A842ACD004010005020C0023002130006B +:10436000FFF738FD0028A2D12C4200D144E70123F9 +:10437000039341E7C6286AD0C7287CD003004A4689 +:104380009343DBB2C02B00D18BE0C82800D18FE073 +:10439000C92800D08BE73800FFF7F2FEF0230203B4 +:1043A0001B03134042460240013278E73800FFF712 +:1043B000E7FE002800D17AE7030042469343DBB2D0 +:1043C000002B00D073E7020000213000FFF702FD50 +:1043D000002800D06BE70FE705AB00939B460D224A +:1043E000002300213000FFF7E7FA3800FFF7C8FE8E +:1043F00003066AD57F25B03C059B2840A0409C461B +:104400006044059038000734FFF7BAFE0306F3D482 +:10441000812292009446863AFF3A1040A040059BC4 +:10442000723A634418185B460590009300210023FC +:104430003000FFF7E7FADFE63800FFF7A1FEF023D0 +:1044400002031B03134042460240013270E738006A +:10445000FFF796FEF02302031B031340424602407F +:1044600001321A43032303213000FFF7B3FC002875 +:1044700000D01CE7C0E63800FFF782FE002800D11C +:1044800015E7030042469343DBB2002B00D00EE752 +:10449000020004213000FFF79DFC002800D006E751 +:1044A000AAE64346A0221C40013412032243D9E766 +:1044B0003800FFF765FE434602009A43D2B210323D +:1044C0001840120301300243EAE60224A0E7C04686 +:1044D000030000B5DB6C85B05A6808001202019237 +:1044E0001A0001A908324A6003220A72DB794B7272 +:1044F000FFF770FE05B000BD10B5FFF767FE806CDA +:1045000010BDC04610B5FFF761FEC26CD3799B00A9 +:104510000833D01810BDC04610B500F005F8C046ED +:1045200010B5FFF7F9FFC04610B5062000F074F88B +:10453000012000F0A3F8C046F0B505000F2A2FD9DE +:104540000B0003439B0734D116000C000300103E00 +:10455000350901352D01451927681F6067685F60BF +:10456000A7689F60E7681034DF6010339D42F3D185 +:104570000F239E431036851989191340032B1AD92E +:104580001E1F0023B4080134A400CF58EF50043399 +:10459000A342FAD10324A643331D2240C918ED18C3 +:1045A000002A05D00023CC5CEC5401339342FAD1AD +:1045B000F0BD0500F6E71A00F2E7C04670B5050049 +:1045C0000C001F2922D8B7239B00C358002B14D0FE +:1045D0008A009B181A68002A0FD0012A0BD0511CA0 +:1045E00005D00021200019609047002070BD1623DF +:1045F00003600120FAE70020F8E7280000F02AF81D +:1046000022000100280000F011F8EFE716230360F4 +:1046100001204042EAE7C04610B5034B010018688C +:10462000FFF7CCFF10BDC04600000020002370B58E +:10463000074C050008001100236000F017F8431C28 +:1046400000D070BD2368002BFBD02B60F9E7C0467B +:104650002C07002010B500F001F810BD58220120F1 +:10466000014B40421A6070472C070020582201205D +:10467000014B40421A6070472C070020FEE7C046FD +:1046800002B4714649084900095C49008E4402BCE5 +:104690007047C04603B47146490840004900095EAE +:1046A00049008E4403BC704703B47146490840007A +:1046B0004900095A49008E4403BC7047F8B5C0460A +:1046C000F8B5C04609021200010100803209040059 +:1046D00000000000000012010002FF000008C016E8 +:1046E000DC05000201020001040309042A03490059 +:1046F0006E00660069006E006900740065004E007F +:10470000650073004C0069007600650073002E00A0 +:1047100063006F006D00000000000000000000005A +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740001E0349004E004C0020005200650074001A +:1047500072006F002D00500072006F0067000000B3 +:104760000000000000000000000000000000000049 +:0C4770000000000000000000000000003D +:10477C0074B20181B0AB308000000000800A01816E +:10478C00B0B0ABF0000000003F020181B0AB308054 +:10479C000000000080060181B0B0ABF0000000000A +:1047AC00F4ECFF7FB0B0B08050EEFF7F0100000052 +:1047BC00FCEEFF7FB0A9028090EFFF7FB0B0A88025 +:1047CC00E0EFFF7F01000000ECEFFF7FB0B0AA80AC +:1047DC0020F0FF7F9CFFFF7FF0F0FF7F01000000C7 +:1047EC00ECF0FF7FAA3F398038F1FF7FB0B0A88092 +:1047FC0044F1FF7FB0B0AA8084F1FF7FB0B0A880F5 +:10480C0098F1FF7F0100000094F1FF7FB0B0A88009 +:10481C009CF1FF7F010000002CF2FF7FAA0FB280F9 +:10482C0094F2FF7F58FFFF7F7CF5FF7FB0B0A8802C +:10483C0098F5FF7F54FFFF7FF8F7FF7F0100000022 +:10484C0068F9FF7F0084048078F9FF7FB0B0A880FE +:10485C0078F9FF7F40FFFF7F6CFCFF7F00840480B2 +:10486C008CFCFF7FB0B0A880A4FCFF7F010000008F +:10487C00080000200000000000000000F4020020EE +:10488C005C030020C40300200000000000000000B6 :10489C00000000000000000000000000000000000C :1048AC0000000000000000000000000000000000FC :1048BC0000000000000000000000000000000000EC @@ -1170,8 +1170,8 @@ :1048FC0000000000000000000000000000000000AC :10490C00000000000000000000000000000000009B :10491C00000000000000000000000000000000008B -:10492C00000000000000000000000000000000007B -:10493C00000000000000000000000000000000006B +:10492C0001000000000000000E33CDAB34126DE628 +:10493C00ECDE05000B000000000000000000000091 :10494C00000000000000000000000000000000005B :10495C00000000000000000000000000000000004B :10496C00000000000000000000000000000000003B @@ -1205,5 +1205,26 @@ :104B2C000000000000000000000000000000000079 :104B3C000000000000000000000000000000000069 :104B4C000000000000000000000000000000000059 +:104B5C000000000000000000000000000000000049 +:104B6C000000000000000000000000000000000039 +:104B7C000000000000000000000000000000000029 +:104B8C000000000000000000000000000000000019 +:104B9C000000000000000000000000000000000009 +:104BAC0000000000000000000000000000000000F9 +:104BBC0000000000000000000000000000000000E9 +:104BCC0000000000000000000000000000000000D9 +:104BDC0000000000000000000000000000000000C9 +:104BEC0000000000000000000000000000000000B9 +:104BFC0000000000000000000000000000000000A9 +:104C0C000000000000000000000000000000000098 +:104C1C000000000000000000000000000000000088 +:104C2C000000000000000000000000000000000078 +:104C3C000000000000000000000000000000000068 +:104C4C000000000000000000000000000000000058 +:104C5C000000000000000000000000000000000048 +:104C6C000000000000000000000000000000000038 +:104C7C000000000000000000000000000000000028 +:104C8C000000000000000000000000000000000018 +:104C9C000000000000000000000000000000000008 :04000005080000C12E :00000001FF diff --git a/firmware/build_stm/inlretro_stm.map b/firmware/build_stm/inlretro_stm.map index 025e55d..98f602a 100644 --- a/firmware/build_stm/inlretro_stm.map +++ b/firmware/build_stm/inlretro_stm.map @@ -1,7 +1,7 @@ Archive member included to satisfy reference by file (symbol) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) - C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o (__aeabi_unwind_cpp_pr0) + C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o (__aeabi_unwind_cpp_pr0) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(libunwind.o) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) (restore_core_regs) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o) @@ -51,11 +51,11 @@ c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o) (_exit) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) - C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o (__gnu_thumb1_case_uqi) + C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o (__gnu_thumb1_case_uqi) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) - C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o (__gnu_thumb1_case_shi) + C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o (__gnu_thumb1_case_shi) c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) - C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o (__gnu_thumb1_case_uhi) + C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o (__gnu_thumb1_case_uhi) Allocating common symbols Common symbol size file @@ -65,6 +65,7 @@ __lock___atexit_recursive_mutex __lock___arc4random_mutex 0x1 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-lock.o) errno 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o) +addrh 0x4 source/bootload.o (symbol from plugin) incoming_bytes_remain 0x1 source/buffer.o (symbol from plugin) __lock___env_recursive_mutex @@ -107,39 +108,48 @@ Discarded input sections .ARM.exidx 0x00000000 0x8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o .ARM.attributes 0x00000000 0x1b c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o - .text 0x00000000 0x0 source/buffer.o (symbol from plugin) - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o + .text 0x00000000 0x0 source/bootload.o (symbol from plugin) + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .rodata.oper_info - 0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o + 0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + .text 0x00000000 0x0 source/buffer.o (symbol from plugin) + .text 0x00000000 0x0 source/ciccom.o (symbol from plugin) .text 0x00000000 0x0 source/dump.o (symbol from plugin) .text 0x00000000 0x0 source/flash.o (symbol from plugin) + .text 0x00000000 0x0 source/gameboy.o (symbol from plugin) + .text 0x00000000 0x0 source/gba.o (symbol from plugin) .text 0x00000000 0x0 source/io.o (symbol from plugin) .text 0x00000000 0x0 source/jtag.o (symbol from plugin) .text 0x00000000 0x0 source/main.o (symbol from plugin) + .text 0x00000000 0x0 source/n64.o (symbol from plugin) .text 0x00000000 0x0 source/nes.o (symbol from plugin) .text 0x00000000 0x0 source/operation.o (symbol from plugin) .text 0x00000000 0x0 source/pinport.o (symbol from plugin) + .text 0x00000000 0x0 source/sega.o (symbol from plugin) .text 0x00000000 0x0 source/snes.o (symbol from plugin) .text 0x00000000 0x0 source/swim.o (symbol from plugin) .text 0x00000000 0x0 source/usb.o (symbol from plugin) .text 0x00000000 0x0 source_stm_only/stm_init.o (symbol from plugin) .text 0x00000000 0x0 source_stm_only/usbstm.o (symbol from plugin) - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o - .ARM.extab 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .ARM.extab 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o + .ARM.extab 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o .data 0x00000000 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) .bss 0x00000000 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) .debug_frame 0x00000000 0x2c4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) @@ -405,26 +415,33 @@ Linker script and memory map LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o -LOAD C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o +LOAD C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o +LOAD source/bootload.o +LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o +LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o +LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o +LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o LOAD source/buffer.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o +LOAD source/ciccom.o LOAD source/dump.o LOAD source/flash.o +LOAD source/gameboy.o +LOAD source/gba.o LOAD source/io.o LOAD source/jtag.o LOAD source/main.o +LOAD source/n64.o LOAD source/nes.o LOAD source/operation.o LOAD source/pinport.o +LOAD source/sega.o LOAD source/snes.o LOAD source/swim.o LOAD source/usb.o LOAD source_stm_only/stm_init.o LOAD source_stm_only/usbstm.o -LOAD C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o START GROUP LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a @@ -438,12 +455,12 @@ END GROUP LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtend.o LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtn.o -.text 0x08000000 0x462c +.text 0x08000000 0x477c *(.isr_vector) - .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o + .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o 0x08000000 __isr_vector *(.text*) - .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o + .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o 0x080000c0 Reset_Handler 0x080000fc TSC_IRQHandler 0x080000fc ADC1_COMP_IRQHandler @@ -483,164 +500,172 @@ LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eab 0x080000fc USART1_IRQHandler 0x080000fc TIM1_BRK_UP_TRG_COM_IRQHandler .text.USB_IRQHandler - 0x08000100 0x18bc C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x08000100 0x1970 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o 0x08000100 USB_IRQHandler .text.pbje_scan - 0x080019bc 0x12c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o + 0x08001a70 0x12c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o .text.pbje_state_change - 0x08001ae8 0x98 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o + 0x08001b9c 0x98 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o .text.get_next_buff - 0x08001b80 0x54 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o + 0x08001c34 0x54 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o .text.jtag_init_pbje - 0x08001bd4 0xe0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - 0x08001bd4 jtag_init_pbje + 0x08001c88 0xe0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + 0x08001c88 jtag_init_pbje .text.jtag_run_pbje.part.0 - 0x08001cb4 0xd8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - 0x08001cb4 jtag_run_pbje.part.0 + 0x08001d68 0xd8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + 0x08001d68 jtag_run_pbje.part.0 .text.io_reset - 0x08001d8c 0x148 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - 0x08001d8c io_reset + 0x08001e40 0x148 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + 0x08001e40 io_reset .text.startup.main - 0x08001ed4 0xe14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - 0x08001ed4 main + 0x08001f88 0xda8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + 0x08001f88 main .text.append_pairity - 0x08002ce8 0x1e C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - *fill* 0x08002d06 0x2 + 0x08002d30 0x1e C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + *fill* 0x08002d4e 0x2 .text.nes_cpu_wr - 0x08002d08 0x6c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08002d08 nes_cpu_wr + 0x08002d50 0x6c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08002d50 nes_cpu_wr .text.nes_cpu_rd - 0x08002d74 0x40 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08002d74 nes_cpu_rd + 0x08002dbc 0x40 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08002dbc nes_cpu_rd + .text.disc_push_exp0_prgrom_wr + 0x08002dfc 0x48 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08002dfc disc_push_exp0_prgrom_wr .text.discrete_exp0_prgrom_wr - 0x08002db4 0x58 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08002db4 discrete_exp0_prgrom_wr - .text.control_xfr_in.lto_priv.33 - 0x08002e0c 0xbc C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08002e0c control_xfr_in.lto_priv.33 + 0x08002e44 0x58 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08002e44 discrete_exp0_prgrom_wr + .text.control_xfr_in.lto_priv.39 + 0x08002e9c 0xbc C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08002e9c control_xfr_in.lto_priv.39 .text.HardFault_Handler - 0x08002ec8 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08002ec8 HardFault_Handler - *fill* 0x08002eca 0x2 + 0x08002f58 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08002f58 HardFault_Handler + *fill* 0x08002f5a 0x2 .text.swim_wotf - 0x08002ecc 0xb4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08002ecc swim_wotf + 0x08002f5c 0xb4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08002f5c swim_wotf .text.swim_rotf - 0x08002f80 0xac C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08002f80 swim_rotf + 0x08003010 0xac C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08003010 swim_rotf .text.delay_us - 0x0800302c 0x16 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x0800302c delay_us - *fill* 0x08003042 0x2 + 0x080030bc 0x16 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x080030bc delay_us + *fill* 0x080030d2 0x2 .text.snes_rom_wr - 0x08003044 0x4c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08003044 snes_rom_wr + 0x080030d4 0x4c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x080030d4 snes_rom_wr .text.snes_rom_rd - 0x08003090 0x40 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08003090 snes_rom_rd - .text.mmc1_wr 0x080030d0 0x38 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x080030d0 mmc1_wr + 0x08003120 0x40 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08003120 snes_rom_rd + .text.mmc1_wr 0x08003160 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08003160 mmc1_wr .text.nes_dualport_wr - 0x08003108 0x50 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08003108 nes_dualport_wr + 0x08003198 0x50 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08003198 nes_dualport_wr .text.nes_dualport_rd - 0x08003158 0x38 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08003158 nes_dualport_rd + 0x080031e8 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x080031e8 nes_dualport_rd .text.nes_ppu_wr - 0x08003190 0x50 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x08003190 nes_ppu_wr + 0x08003220 0x50 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08003220 nes_ppu_wr .text.nes_ppu_rd - 0x080031e0 0x38 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x080031e0 nes_ppu_rd - .text.write_page.constprop.23 - 0x08003218 0x68 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - 0x08003218 write_page.constprop.23 - .text.nes_cpu_page_rd_poll.constprop.17 - 0x08003280 0x6c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - 0x08003280 nes_cpu_page_rd_poll.constprop.17 - .text.nes_ppu_page_rd_poll.constprop.16 - 0x080032ec 0x68 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - 0x080032ec nes_ppu_page_rd_poll.constprop.16 - *fill* 0x08003354 0xc - .text 0x08003360 0x154 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o - 0x08003360 swim_xfr - .text 0x080034b4 0xa38 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) - 0x08003784 _Unwind_GetCFA - 0x08003788 __gnu_Unwind_RaiseException - 0x080037dc __gnu_Unwind_ForcedUnwind - 0x080037f0 __gnu_Unwind_Resume - 0x08003838 __gnu_Unwind_Resume_or_Rethrow - 0x08003854 _Unwind_Complete - 0x08003858 _Unwind_DeleteException - 0x08003868 _Unwind_VRS_Get - 0x080038b4 _Unwind_VRS_Set - 0x08003900 __gnu_Unwind_Backtrace - 0x08003c60 __aeabi_unwind_cpp_pr0 - 0x08003c6c __aeabi_unwind_cpp_pr1 - 0x08003c78 __aeabi_unwind_cpp_pr2 - 0x08003c84 _Unwind_VRS_Pop - .text 0x08003eec 0x144 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(libunwind.o) - 0x08003eec __restore_core_regs - 0x08003eec restore_core_regs - 0x08003f18 __gnu_Unwind_Restore_VFP - 0x08003f1c __gnu_Unwind_Save_VFP - 0x08003f20 __gnu_Unwind_Restore_VFP_D - 0x08003f24 __gnu_Unwind_Save_VFP_D - 0x08003f28 __gnu_Unwind_Restore_VFP_D_16_to_31 - 0x08003f2c __gnu_Unwind_Save_VFP_D_16_to_31 - 0x08003f30 __gnu_Unwind_Restore_WMMXD - 0x08003f34 __gnu_Unwind_Save_WMMXD - 0x08003f38 __gnu_Unwind_Restore_WMMXC - 0x08003f3c __gnu_Unwind_Save_WMMXC - 0x08003f40 ___Unwind_RaiseException - 0x08003f40 _Unwind_RaiseException - 0x08003f70 _Unwind_Resume - 0x08003f70 ___Unwind_Resume - 0x08003fa0 _Unwind_Resume_or_Rethrow - 0x08003fa0 ___Unwind_Resume_or_Rethrow - 0x08003fd0 _Unwind_ForcedUnwind - 0x08003fd0 ___Unwind_ForcedUnwind - 0x08004000 ___Unwind_Backtrace - 0x08004000 _Unwind_Backtrace - .text 0x08004030 0x3a8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o) - 0x08004084 __gnu_unwind_execute - 0x08004380 __gnu_unwind_frame - 0x080043a8 _Unwind_GetRegionStart - 0x080043b4 _Unwind_GetLanguageSpecificData - 0x080043c8 _Unwind_GetTextRelBase - 0x080043d0 _Unwind_GetDataRelBase - .text.abort 0x080043d8 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o) - 0x080043d8 abort - .text.memcpy 0x080043e8 0x84 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o) - 0x080043e8 memcpy + 0x08003270 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x08003270 nes_ppu_rd + .text.write_page.constprop.28 + 0x080032a8 0x68 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + 0x080032a8 write_page.constprop.28 + .text.write_page_bank.constprop.26 + 0x08003310 0xbc C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + 0x08003310 write_page_bank.constprop.26 + .text.nes_cpu_page_rd_poll.constprop.22 + 0x080033cc 0x6c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + 0x080033cc nes_cpu_page_rd_poll.constprop.22 + .text.nes_ppu_page_rd_poll.constprop.21 + 0x08003438 0x68 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + 0x08003438 nes_ppu_page_rd_poll.constprop.21 + .text 0x080034a0 0x4 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + 0x080034a0 jump2addr + *fill* 0x080034a4 0xc + .text 0x080034b0 0x154 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o + 0x080034b0 swim_xfr + .text 0x08003604 0xa38 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) + 0x080038d4 _Unwind_GetCFA + 0x080038d8 __gnu_Unwind_RaiseException + 0x0800392c __gnu_Unwind_ForcedUnwind + 0x08003940 __gnu_Unwind_Resume + 0x08003988 __gnu_Unwind_Resume_or_Rethrow + 0x080039a4 _Unwind_Complete + 0x080039a8 _Unwind_DeleteException + 0x080039b8 _Unwind_VRS_Get + 0x08003a04 _Unwind_VRS_Set + 0x08003a50 __gnu_Unwind_Backtrace + 0x08003db0 __aeabi_unwind_cpp_pr0 + 0x08003dbc __aeabi_unwind_cpp_pr1 + 0x08003dc8 __aeabi_unwind_cpp_pr2 + 0x08003dd4 _Unwind_VRS_Pop + .text 0x0800403c 0x144 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(libunwind.o) + 0x0800403c __restore_core_regs + 0x0800403c restore_core_regs + 0x08004068 __gnu_Unwind_Restore_VFP + 0x0800406c __gnu_Unwind_Save_VFP + 0x08004070 __gnu_Unwind_Restore_VFP_D + 0x08004074 __gnu_Unwind_Save_VFP_D + 0x08004078 __gnu_Unwind_Restore_VFP_D_16_to_31 + 0x0800407c __gnu_Unwind_Save_VFP_D_16_to_31 + 0x08004080 __gnu_Unwind_Restore_WMMXD + 0x08004084 __gnu_Unwind_Save_WMMXD + 0x08004088 __gnu_Unwind_Restore_WMMXC + 0x0800408c __gnu_Unwind_Save_WMMXC + 0x08004090 ___Unwind_RaiseException + 0x08004090 _Unwind_RaiseException + 0x080040c0 _Unwind_Resume + 0x080040c0 ___Unwind_Resume + 0x080040f0 _Unwind_Resume_or_Rethrow + 0x080040f0 ___Unwind_Resume_or_Rethrow + 0x08004120 _Unwind_ForcedUnwind + 0x08004120 ___Unwind_ForcedUnwind + 0x08004150 ___Unwind_Backtrace + 0x08004150 _Unwind_Backtrace + .text 0x08004180 0x3a8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o) + 0x080041d4 __gnu_unwind_execute + 0x080044d0 __gnu_unwind_frame + 0x080044f8 _Unwind_GetRegionStart + 0x08004504 _Unwind_GetLanguageSpecificData + 0x08004518 _Unwind_GetTextRelBase + 0x08004520 _Unwind_GetDataRelBase + .text.abort 0x08004528 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o) + 0x08004528 abort + .text.memcpy 0x08004538 0x84 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o) + 0x08004538 memcpy .text._raise_r - 0x0800446c 0x5c c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o) - 0x0800446c _raise_r - .text.raise 0x080044c8 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o) - 0x080044c8 raise - .text._kill_r 0x080044dc 0x28 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o) - 0x080044dc _kill_r + 0x080045bc 0x5c c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o) + 0x080045bc _raise_r + .text.raise 0x08004618 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o) + 0x08004618 raise + .text._kill_r 0x0800462c 0x28 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o) + 0x0800462c _kill_r .text._getpid_r - 0x08004504 0x8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o) - 0x08004504 _getpid_r - .text._getpid 0x0800450c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o) - 0x0800450c _getpid - .text._kill 0x0800451c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o) - 0x0800451c _kill - .text._exit 0x0800452c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o) - 0x0800452c _exit - .text 0x08004530 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) - 0x08004530 __gnu_thumb1_case_uqi - .text 0x08004544 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) - 0x08004544 __gnu_thumb1_case_shi - .text 0x08004558 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) - 0x08004558 __gnu_thumb1_case_uhi + 0x08004654 0x8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o) + 0x08004654 _getpid_r + .text._getpid 0x0800465c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o) + 0x0800465c _getpid + .text._kill 0x0800466c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o) + 0x0800466c _kill + .text._exit 0x0800467c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o) + 0x0800467c _exit + .text 0x08004680 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) + 0x08004680 __gnu_thumb1_case_uqi + .text 0x08004694 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) + 0x08004694 __gnu_thumb1_case_shi + .text 0x080046a8 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) + 0x080046a8 __gnu_thumb1_case_uhi *(.init) - .init 0x0800456c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o - 0x0800456c _init + .init 0x080046bc 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o + 0x080046bc _init *(.fini) - .fini 0x08004570 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o - 0x08004570 _fini + .fini 0x080046c0 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o + 0x080046c0 _fini *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors) @@ -653,53 +678,54 @@ LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eab *(.dtors) *(.rodata*) .rodata.config_desc - 0x08004574 0x12 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x080046c4 0x12 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .rodata.device_desc - 0x08004586 0x12 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x080046d6 0x12 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .rodata.string0_desc - 0x08004598 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x080046e8 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .rodata.string1_desc - 0x0800459c 0x54 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x080046ec 0x54 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .rodata.string2_desc - 0x080045f0 0x3c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x08004740 0x3c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o *(.eh_frame*) -.glue_7 0x0800462c 0x0 - .glue_7 0x0800462c 0x0 linker stubs +.glue_7 0x0800477c 0x0 + .glue_7 0x0800477c 0x0 linker stubs -.glue_7t 0x0800462c 0x0 - .glue_7t 0x0800462c 0x0 linker stubs +.glue_7t 0x0800477c 0x0 + .glue_7t 0x0800477c 0x0 linker stubs -.vfp11_veneer 0x0800462c 0x0 - .vfp11_veneer 0x0800462c 0x0 linker stubs +.vfp11_veneer 0x0800477c 0x0 + .vfp11_veneer 0x0800477c 0x0 linker stubs -.v4_bx 0x0800462c 0x0 - .v4_bx 0x0800462c 0x0 linker stubs +.v4_bx 0x0800477c 0x0 + .v4_bx 0x0800477c 0x0 linker stubs -.iplt 0x0800462c 0x0 - .iplt 0x0800462c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o +.iplt 0x0800477c 0x0 + .iplt 0x0800477c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o -.ARM.extab 0x0800462c 0x30 +.ARM.extab 0x0800477c 0x30 *(.ARM.extab* .gnu.linkonce.armextab.*) - .ARM.extab 0x0800462c 0x24 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) - .ARM.extab 0x08004650 0xc c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o) - 0x0800465c __exidx_start = . + .ARM.extab 0x0800477c 0x24 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) + .ARM.extab 0x080047a0 0xc c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o) + 0x080047ac __exidx_start = . -.ARM.exidx 0x0800465c 0xd0 +.ARM.exidx 0x080047ac 0xd0 *(.ARM.exidx* .gnu.linkonce.armexidx.*) - .ARM.exidx 0x0800465c 0x8 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o + .ARM.exidx 0x080047ac 0x8 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .ARM.exidx 0x080047b4 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o 0x10 (size before relaxing) - .ARM.exidx 0x08004664 0x98 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) + .ARM.exidx 0x080047b4 0x98 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) 0xd8 (size before relaxing) - .ARM.exidx 0x080046fc 0x30 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o) + .ARM.exidx 0x0800484c 0x30 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o) 0x48 (size before relaxing) - 0x0800472c __exidx_end = . - 0x0800472c __etext = ALIGN (0x4) + 0x0800487c __exidx_end = . + 0x0800487c __etext = ALIGN (0x4) -.rel.dyn 0x0800472c 0x0 - .rel.iplt 0x0800472c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o +.rel.dyn 0x0800487c 0x0 + .rel.iplt 0x0800487c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o -.data 0x20000000 0x430 load address 0x0800472c +.data 0x20000000 0x430 load address 0x0800487c 0x20000000 __data_start__ = . *(vtable) *(.data*) @@ -727,115 +753,116 @@ LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eab 0x20000430 . = ALIGN (0x4) 0x20000430 __data_end__ = . -.igot.plt 0x20000430 0x0 load address 0x08004b5c +.igot.plt 0x20000430 0x0 load address 0x08004cac .igot.plt 0x20000430 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o -.bss 0x20000430 0x2fc load address 0x08004b5c +.bss 0x20000430 0x300 load address 0x08004cac 0x20000430 . = ALIGN (0x4) 0x20000430 __bss_start__ = . *(.bss*) - .bss.buff0 0x20000430 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000430 buff0 - .bss.buff1 0x20000444 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000444 buff1 - .bss.buff2 0x20000458 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000458 buff2 - .bss.buff3 0x2000046c 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x2000046c buff3 - .bss.cur_buff 0x20000480 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000480 cur_buff + .bss.addrh 0x20000430 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .bss.buff0 0x20000434 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000434 buff0 + .bss.buff1 0x20000448 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000448 buff1 + .bss.buff2 0x2000045c 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x2000045c buff2 + .bss.buff3 0x20000470 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000470 buff3 + .bss.cur_buff 0x20000484 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000484 cur_buff .bss.cur_usb_load_buff - 0x20000484 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x20000488 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .bss.incoming_bytes_remain - 0x20000488 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - *fill* 0x20000489 0x3 - .bss.log 0x2000048c 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x2000048c 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + *fill* 0x2000048d 0x3 + .bss.log 0x20000490 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .bss.new_address - 0x20000490 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - *fill* 0x20000491 0x1 - .bss.num_bytes_req.lto_priv.36 - 0x20000492 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000492 num_bytes_req.lto_priv.36 - .bss.num_bytes_sending.lto_priv.35 - 0x20000494 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000494 num_bytes_sending.lto_priv.35 - .bss.num_bytes_xfrd.lto_priv.34 - 0x20000496 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000496 num_bytes_xfrd.lto_priv.34 + 0x20000494 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + *fill* 0x20000495 0x1 + .bss.num_bytes_req.lto_priv.42 + 0x20000496 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000496 num_bytes_req.lto_priv.42 + .bss.num_bytes_sending.lto_priv.41 + 0x20000498 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000498 num_bytes_sending.lto_priv.41 + .bss.num_bytes_xfrd.lto_priv.40 + 0x2000049a 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x2000049a num_bytes_xfrd.lto_priv.40 .bss.oper_info_struct - 0x20000498 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000498 oper_info_struct + 0x2000049c 0x20 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x2000049c oper_info_struct .bss.pbje_command - 0x200004b8 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x200004b8 pbje_command + 0x200004bc 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x200004bc pbje_command .bss.pbje_data - 0x200004b9 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x200004b9 pbje_data + 0x200004bd 0x20 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x200004bd pbje_data .bss.pbje_numclk - 0x200004d9 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x200004d9 pbje_numclk + 0x200004dd 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x200004dd pbje_numclk .bss.pbje_status - 0x200004da 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x200004da pbje_status + 0x200004de 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x200004de pbje_status .bss.raw_bank_status - 0x200004db 0x10 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - *fill* 0x200004eb 0x1 + 0x200004df 0x10 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + *fill* 0x200004ef 0x1 .bss.raw_buffer16 - 0x200004ec 0x200 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .bss.req_dir 0x200006ec 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .bss.reqdir 0x200006ed 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .bss.reqtype 0x200006ee 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - *fill* 0x200006ef 0x1 - .bss.rv16.4882 - 0x200006f0 0x8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x200004f0 0x200 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .bss.req_dir 0x200006f0 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .bss.reqdir 0x200006f1 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .bss.reqtype 0x200006f2 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + *fill* 0x200006f3 0x1 + .bss.rv16.4938 + 0x200006f4 0x8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .bss.swim_base - 0x200006f8 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x200006f8 swim_base - .bss.swim_pin 0x200006fc 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x200006fc swim_pin - *fill* 0x200006fd 0x3 - .bss.tck_base 0x20000700 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000700 tck_base - .bss.tck_pin 0x20000704 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000704 tck_pin - *fill* 0x20000705 0x3 - .bss.tdi_base 0x20000708 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000708 tdi_base - .bss.tdi_pin 0x2000070c 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x2000070c tdi_pin - *fill* 0x2000070d 0x3 - .bss.tdo_base 0x20000710 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000710 tdo_base - .bss.tdo_pin 0x20000714 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000714 tdo_pin - *fill* 0x20000715 0x3 - .bss.tms_base 0x20000718 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000718 tms_base - .bss.tms_pin 0x2000071c 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x2000071c tms_pin - *fill* 0x2000071d 0x3 + 0x200006fc 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x200006fc swim_base + .bss.swim_pin 0x20000700 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000700 swim_pin + *fill* 0x20000701 0x3 + .bss.tck_base 0x20000704 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000704 tck_base + .bss.tck_pin 0x20000708 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000708 tck_pin + *fill* 0x20000709 0x3 + .bss.tdi_base 0x2000070c 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x2000070c tdi_base + .bss.tdi_pin 0x20000710 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000710 tdi_pin + *fill* 0x20000711 0x3 + .bss.tdo_base 0x20000714 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000714 tdo_base + .bss.tdo_pin 0x20000718 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000718 tdo_pin + *fill* 0x20000719 0x3 + .bss.tms_base 0x2000071c 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x2000071c tms_base + .bss.tms_pin 0x20000720 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000720 tms_pin + *fill* 0x20000721 0x3 .bss.usbMsgPtr - 0x20000720 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x20000720 usbMsgPtr - .bss.num_buff.4962 - 0x20000724 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o + 0x20000724 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x20000724 usbMsgPtr + .bss.num_buff.5018 + 0x20000728 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o *(COMMON) - *fill* 0x20000725 0x3 - COMMON 0x20000728 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o) - 0x20000728 errno - 0x2000072c . = ALIGN (0x4) - 0x2000072c __bss_end__ = . + *fill* 0x20000729 0x3 + COMMON 0x2000072c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o) + 0x2000072c errno + 0x20000730 . = ALIGN (0x4) + 0x20000730 __bss_end__ = . .heap 0x20000730 0x0 0x20000730 __end__ = . 0x20000730 PROVIDE (end, .) *(.heap*) - .heap 0x20000730 0x0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o + .heap 0x20000730 0x0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o 0x20000730 __HeapLimit = . .stack_dummy 0x20000730 0xc00 *(.stack*) - .stack 0x20000730 0xc00 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o + .stack 0x20000730 0xc00 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o 0x20001800 __StackTop = (ORIGIN (RAM) + LENGTH (RAM)) 0x20000c00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy)) 0x20001800 PROVIDE (__stack, __StackTop) @@ -847,96 +874,103 @@ OUTPUT(build_stm/inlretro_stm.elf elf32-littlearm) .ARM.attributes 0x00000000 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o .ARM.attributes - 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o + 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o .ARM.attributes - 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .ARM.attributes - 0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o + 0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o .ARM.attributes - 0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o + 0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o .ARM.attributes - 0x000000c6 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o + 0x000000c6 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o .ARM.attributes - 0x000000f5 0x21 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o + 0x000000f5 0x21 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o .ARM.attributes - 0x00000116 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) + 0x00000116 0x21 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o .ARM.attributes - 0x00000134 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) + 0x00000137 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) .ARM.attributes - 0x00000152 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) + 0x00000155 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) + .ARM.attributes + 0x00000173 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) .comment 0x00000000 0x7f - .comment 0x00000000 0x7f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + .comment 0x00000000 0x7f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o 0x80 (size before relaxing) - .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o + .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o -.debug_line 0x00000000 0x18dc - .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o - .debug_line 0x0000006f 0xa19 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .debug_line 0x00000a88 0x815 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .debug_line 0x0000129d 0x3a8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .debug_line 0x00001645 0x1a4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - .debug_line 0x000017e9 0xf3 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o +.debug_line 0x00000000 0x19fd + .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o + .debug_line 0x0000006f 0xab1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .debug_line 0x00000b20 0x7ec C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .debug_line 0x0000130c 0x3ce C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .debug_line 0x000016da 0x1e6 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + .debug_line 0x000018c0 0x4a C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .debug_line 0x0000190a 0xf3 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o -.debug_info 0x00000000 0x38f0 - .debug_info 0x00000000 0x82 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o - .debug_info 0x00000082 0x14d6 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .debug_info 0x00001558 0x18c6 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .debug_info 0x00002e1e 0x632 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .debug_info 0x00003450 0x425 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - .debug_info 0x00003875 0x7b C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o +.debug_info 0x00000000 0x3d46 + .debug_info 0x00000000 0x82 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o + .debug_info 0x00000082 0x1823 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .debug_info 0x000018a5 0x177e C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .debug_info 0x00003023 0x66d C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .debug_info 0x00003690 0x5bc C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + .debug_info 0x00003c4c 0x7f C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .debug_info 0x00003ccb 0x7b C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o -.debug_abbrev 0x00000000 0xa81 - .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o - .debug_abbrev 0x00000014 0x387 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .debug_abbrev 0x0000039b 0x396 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .debug_abbrev 0x00000731 0x1ba C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .debug_abbrev 0x000008eb 0x182 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - .debug_abbrev 0x00000a6d 0x14 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o +.debug_abbrev 0x00000000 0xabf + .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o + .debug_abbrev 0x00000014 0x3a8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .debug_abbrev 0x000003bc 0x396 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .debug_abbrev 0x00000752 0x1ba C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .debug_abbrev 0x0000090c 0x18b C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + .debug_abbrev 0x00000a97 0x14 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .debug_abbrev 0x00000aab 0x14 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o -.debug_aranges 0x00000000 0x178 +.debug_aranges 0x00000000 0x1a8 .debug_aranges - 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o + 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o .debug_aranges - 0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o + 0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o .debug_aranges - 0x00000040 0x50 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o + 0x00000040 0x50 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o .debug_aranges - 0x00000090 0x98 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o + 0x00000090 0xa0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o .debug_aranges - 0x00000128 0x30 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o + 0x00000130 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o .debug_aranges - 0x00000158 0x20 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o + 0x00000168 0x20 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o + .debug_aranges + 0x00000188 0x20 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o -.debug_loc 0x00000000 0x3cfd - .debug_loc 0x00000000 0x2457 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .debug_loc 0x00002457 0xfc0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .debug_loc 0x00003417 0x61e C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .debug_loc 0x00003a35 0x2c8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o +.debug_loc 0x00000000 0x404b + .debug_loc 0x00000000 0x2691 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .debug_loc 0x00002691 0xf75 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .debug_loc 0x00003606 0x660 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .debug_loc 0x00003c66 0x3e5 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o -.debug_ranges 0x00000000 0x1608 - .debug_ranges 0x00000000 0x12d0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .debug_ranges 0x000012d0 0x290 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .debug_ranges 0x00001560 0x88 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .debug_ranges 0x000015e8 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o +.debug_ranges 0x00000000 0x1708 + .debug_ranges 0x00000000 0x13e8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .debug_ranges 0x000013e8 0x268 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .debug_ranges 0x00001650 0x90 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .debug_ranges 0x000016e0 0x28 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o -.debug_str 0x00000000 0xc68 - .debug_str 0x00000000 0x87d C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - 0x8e2 (size before relaxing) - .debug_str 0x0000087d 0x247 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - 0x4d9 (size before relaxing) - .debug_str 0x00000ac4 0x113 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - 0x2f8 (size before relaxing) - .debug_str 0x00000bd7 0x91 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o - 0x307 (size before relaxing) +.debug_str 0x00000000 0xd18 + .debug_str 0x00000000 0x8f7 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + 0x95c (size before relaxing) + .debug_str 0x000008f7 0x237 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + 0x4d2 (size before relaxing) + .debug_str 0x00000b2e 0x12c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + 0x311 (size before relaxing) + .debug_str 0x00000c5a 0xbe C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o + 0x33d (size before relaxing) -.debug_frame 0x00000000 0x2ec - .debug_frame 0x00000000 0x30 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o - .debug_frame 0x00000030 0xd8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o - .debug_frame 0x00000108 0x174 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o - .debug_frame 0x0000027c 0x70 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o +.debug_frame 0x00000000 0x31c + .debug_frame 0x00000000 0x30 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o + .debug_frame 0x00000030 0xd8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o + .debug_frame 0x00000108 0x184 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o + .debug_frame 0x0000028c 0x90 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o .stabstr 0x00000000 0x76 .stabstr 0x00000000 0x76 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o) diff --git a/firmware/source/asm_stm/bootload.s b/firmware/source/asm_stm/bootload.s new file mode 100644 index 0000000..56ce877 --- /dev/null +++ b/firmware/source/asm_stm/bootload.s @@ -0,0 +1,37 @@ + + +//;Ensure that your assembly code complies with the Procedure Call Standard for the ARM Architecture (AAPCS). +//; +//;The AAPCS describes a contract between caller functions and callee functions. For example, for integer or pointer types, it specifies that: +//; +//; Registers R0-R3 pass argument values to the callee function, with subsequent arguments passed on the stack. +//; Register R0 passes the result value back to the caller function. +//; Caller functions must preserve R0-R3 and R12, because these registers are allowed to be corrupted by the callee function. +//; Callee functions must preserve R4-R11 and LR, because these registers are not allowed to be corrupted by the callee function. +//; +//;For more information, see the Procedure Call Standard for the ARM Architecture (AAPCS). + +//;WARNING!!! logic instructions all affect flags despite the 's' postfix arm_none_eabi_gcc doesn't like 's' instructions +//; but the 's' affect flag instructions are the only ones the M0 supports +//; because of this, issue the following code isn't compatible with other cores. + + + +.globl jump2addr +.p2align 2 +.type jump2addr,%function + //;r0 - r3 contain function args (excess on stack) + //;jump2addr( data_pb, spddir_len, swim_base, swim_mask); + //;spddir_len = (SWIM_RD_LS<<16) | len; +//; stream .req a1 this arg is moved to variable reg after stack push + addr .req a1 +//; rv .req r0 +//; len .req a2 +//; swim_base .req a3 +//; swim_mask .req a4 +jump2addr: //;Function entry point. +.fnstart + + //;bkpt + blx r0 +.fnend diff --git a/firmware/source/bootload.c b/firmware/source/bootload.c new file mode 100644 index 0000000..ac5b0a2 --- /dev/null +++ b/firmware/source/bootload.c @@ -0,0 +1,106 @@ +#include "bootload.h" + +//================================================================================================= +// +// BOOTLOAD operations +// This file includes all the bootload functions possible to be called from the bootload dictionary. +// +// See description of the commands contained here in shared/shared_dictionaries.h +// +//================================================================================================= + + +//const uint32_t fixed_const __attribute__((at(0x0800F000))); +//fixed_const= 0xDEADBEEF; + +//int gSquared __attribute__((at(0x5000))); // Place at 0x5000 + + +/* Desc:Function takes an opcode which was transmitted via USB + * then decodes it to call designated function. + * shared_dict_bootload.h is used in both host and fw to ensure opcodes/names align + * Pre: Macros must be defined in firmware pinport.h & bootload.h + * opcode must be defined in shared_dict_bootload.h + * Post:function call complete. + * Rtn: SUCCESS if opcode found, error if opcode not present or other problem. + */ + +uint32_t addrh; + + +uint8_t bootload_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ) +{ + switch (opcode) { +#ifdef STM_CORE + case JUMP_BL: jump_to_bootloader(); break; + //device won't respond after this point so actually expect an error to result + + case LOAD_ADDRH: addrh = operand; break; + case JUMP_ADDR: jump2addr((addrh<<16) | (operand)); break; + //device may not respond depending on the address/function being jumped to + + default: + //opcode doesn't exist + return ERR_UNKN_BOOTLOAD_OPCODE; +#endif + } + + return SUCCESS; + +} + +void jump_to_bootloader() +{ + +#ifdef STM_INL6 +// 070C6 jump to: 0x1FFFC519 +// 070RB jump to: 0x1FFFCBC1 + + + asm( + //"ldr pc, boot_addr\n\t" +// "ldr r0, =0x12345678\n\t" +// "mov r0, r0\n\t" +// "mov r0, r0\n\t" + //".p2align 2\n\t" + //"boot_addr:\n\t" + //".word 0x1FFFC519" + "ldr r0, [pc, #8]\n\t"// @ remember pc is 8 bytes ahead + "mov r13, r0\n\t" //load main stack pointer + "ldr r0, [pc, #8]\n\t"// @ remember pc is 8 bytes ahead + //"mov lr, r0\n\t" + //"bx lr \n\t"// @ function return + //"bkpt\n\t" + "mov r0, r0\n\t" + //"mov pc, r0\n\t" + "bx r0\n\t" + //"bootaddr\n\t"// + //".word 0x1FFFC519" //070C6 + ".p2align 2\n\t" + ".word 0x20001278\n\t" //C6 MSP @ reset +// ".word 0x00010002\n\t" + //".word 0x00030004\n\t" + //".word 0x1FFFC519\n\t" //C6 AN2606 + ".word 0x1FFFCAC5\n\t" //C6 BL reset vector + //".word 0x1FFFCBC1\n\t" //stlink PC when connecting with BL grounded + //".word 0x1FFFC919\n\t" //best guess based on C6 + //".word 0x1FFFCBC1\n\t" //bootloader reset vector + ".word 0x00050006\n\t" + ".word 0x00070008\n\t" +// ".word 0x1FFFC919\n\t" +// ".word 0x1FFFC919\n\t" +// ".word 0x1FFFC919\n\t" +// ".word 0x1FFFC919\n\t" +// ".word 0x1FFFC919\n\t" + ".word 0x1FFFC919" + //".word 0x1FFFCBC1" + ); +bootaddr: + asm( + ".word 0xDEADBEEF" + ); + +#endif + + +} diff --git a/firmware/source/bootload.h b/firmware/source/bootload.h new file mode 100644 index 0000000..3cd9fd8 --- /dev/null +++ b/firmware/source/bootload.h @@ -0,0 +1,18 @@ +#ifndef _bootload_h +#define _bootload_h + +#include "pinport.h" +#include "shared_dictionaries.h" +#include "shared_errors.h" + +#ifdef STM_INL6 + +#endif //end STM_INL6 + +uint8_t bootload_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); + +void jump2addr(uint32_t addr); +void jump_to_bootloader(); + + +#endif diff --git a/firmware/source/ciccom.c b/firmware/source/ciccom.c new file mode 100644 index 0000000..8345687 --- /dev/null +++ b/firmware/source/ciccom.c @@ -0,0 +1,47 @@ +#include "ciccom.h" + +//================================================================================================= +// +// CICCOM operations +// This file includes all the ciccom functions possible to be called from the ciccom dictionary. +// +// See description of the commands contained here in shared/shared_dictionaries.h +// +//================================================================================================= + + + +/* Desc:Function takes an opcode which was transmitted via USB + * then decodes it to call designated function. + * shared_dict_ciccom.h is used in both host and fw to ensure opcodes/names align + * Pre: Macros must be defined in firmware pinport.h & ciccom.h + * opcode must be defined in shared_dict_ciccom.h + * Post:function call complete. + * Rtn: SUCCESS if opcode found, error if opcode not present or other problem. + */ +uint8_t ciccom_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ) +{ +#define RD_LEN 0 +#define RD0 1 +#define RD1 2 +#define RD2 3 +#define RD3 4 +#define RD4 5 +#define RD5 6 +// uint16_t *ret_hword = (uint16_t*) &rdata[1]; + +#define BYTE_LEN 1 +#define HWORD_LEN 2 + switch (opcode) { + +// case CICCOM_INIT: ciccom_init(); break; + + default: + //opcode doesn't exist + return ERR_UNKN_CICCOM_OPCODE; + } + + return SUCCESS; + +} + diff --git a/firmware/source/ciccom.h b/firmware/source/ciccom.h new file mode 100644 index 0000000..5c3b2aa --- /dev/null +++ b/firmware/source/ciccom.h @@ -0,0 +1,12 @@ +#ifndef _ciccom_h +#define _ciccom_h + +#include "pinport.h" +#include "shared_dictionaries.h" +#include "shared_errors.h" + + +uint8_t ciccom_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); + + +#endif diff --git a/firmware/source/dump.c b/firmware/source/dump.c index ce43d1d..807ba76 100644 --- a/firmware/source/dump.c +++ b/firmware/source/dump.c @@ -38,13 +38,15 @@ uint8_t dump_buff( buffer *buff ) { //Nomolos bank table @ CC84 //nes_cpu_wr( (0xCC84+bank), bank ); //Owlia bank table @ CC84 - nes_cpu_wr( (0xE473+bank), bank ); + //nes_cpu_wr( (0xE473+bank), bank ); //Rushnattack //nes_cpu_wr( (0x8000+bank), bank ); //twindragons //nes_cpu_wr( (0xC000+bank), bank ); //h1 //nes_cpu_wr( (0xFFC0+bank), bank ); + //AFB + nes_cpu_wr( (0xFD69+bank), bank ); buff->cur_byte = nes_cpu_page_rd_poll( buff->data, addrH, buff->id, //id contains MSb of page when <256B buffer @@ -159,15 +161,26 @@ uint8_t dump_buff( buffer *buff ) { buff->last_idx, ~FALSE ); break; case SNESROM: - addrH |= 0x80; //$8000 LOROM space - //need to split page_num - //A14-8 page_num[7-0] - //A15 high (LOROM) - //A23-16 page_num[14-8] - HADDR_SET( (buff->page_num)>>7 ); + if (buff->mapper == LOROM) { + addrH |= 0x80; //$8000 LOROM space + //need to split page_num + //A14-8 page_num[6-0] + //A15 high (LOROM) + //A23-16 page_num[14-7] + bank = (buff->page_num)>>7; + } + if (buff->mapper == HIROM) { + //need to split page_num + //A15-8 page_num[7-0] + //A21-16 page_num[13-8] + //A22 high (HIROM) + //A23 ~page_num[14] (bank CO starts first half, bank 40 starts second) + bank = ((((buff->page_num)>>8) | 0x40) & 0x7F); + } + HADDR_SET( bank ); buff->cur_byte = snes_rom_page_rd_poll( buff->data, addrH, buff->id, - //id contains MSb of page when <256B buffer - buff->last_idx, ~FALSE ); + //id contains MSb of page when <256B buffer + buff->last_idx, ~FALSE ); case SNESRAM: //warn addrX = ((buff->page_num)>>8); break; diff --git a/firmware/source/flash.c b/firmware/source/flash.c index 3c2f736..60ade47 100644 --- a/firmware/source/flash.c +++ b/firmware/source/flash.c @@ -81,8 +81,9 @@ uint8_t write_page_bank( uint8_t bank, uint8_t addrH, uint16_t unlock1, uint16_t //select first bank for unlock sequence //needs to be written to bank table! // nes_cpu_wr( (0xCC84), 0x00 ); - nes_cpu_wr( (0xE473), 0x00 ); +// nes_cpu_wr( (0xE473), 0x00 ); // nes_cpu_wr( (0xC000), 0x00 ); + nes_cpu_wr( (0xFD69), 0x00 ); //wr_func( 0x5555, 0xAA ); wr_func( unlock1, 0xAA ); @@ -94,10 +95,11 @@ uint8_t write_page_bank( uint8_t bank, uint8_t addrH, uint16_t unlock1, uint16_t //now need to select bank for the actual write! //but this write can't be applied to the PRG-ROM // nes_cpu_wr( (0xCC84+bank), bank ); - nes_cpu_wr( (0xE473+bank), bank ); + // nes_cpu_wr( (0xE473+bank), bank ); // nes_cpu_wr( (0x8000+bank), bank ); //nes_cpu_wr( (0xC000+bank), bank ); // nes_cpu_wr( (0xFFC0+bank), bank ); + nes_cpu_wr( (0xFD69+bank), bank ); wr_func( ((addrH<<8)| n), buff->data[n] ); @@ -836,6 +838,16 @@ uint8_t flash_buff( buffer *buff ) { //bank gets written inside flash algo write_page_bank( bank, addrH, 0x5555, 0x2AAA, buff, discrete_exp0_prgrom_wr, nes_cpu_rd ); } + if (buff->mapper == MM2) { + //addrH &= 0b1011 1111 A14 must always be low + addrH &= 0x3F; + addrH |= 0x80; //A15 doesn't apply to exp0 write, but needed for read back + //write bank value + //page_num shift by 6 bits A14 >> A8(0) + bank = buff->page_num >> 6; + //bank gets written inside flash algo + write_page_bank( bank, addrH, 0x5555, 0x2AAA, buff, disc_push_exp0_prgrom_wr, nes_cpu_rd ); + } if (buff->mapper == MAP30) { //addrH &= 0b1011 1111 A14 must always be low addrH &= 0x3F; @@ -939,14 +951,25 @@ uint8_t flash_buff( buffer *buff ) { // buff->last_idx, ~FALSE ); break; case SNESROM: - addrH |= 0x80; //$8000 LOROM space - //need to split page_num - //A14-8 page_num[7-0] - //A15 high (LOROM) - //A23-16 page_num[14-8] - HADDR_SET( (buff->page_num)>>7 ); - //clear any reset state - //EXP0_HI(); + if (buff->mapper == LOROM) { + addrH |= 0x80; //$8000 LOROM space + //need to split page_num + //A14-8 page_num[7-0] + //A15 high (LOROM) + //A23-16 page_num[14-8] + bank = (buff->page_num)>>7; + //clear any reset state + //EXP0_HI(); + } + if (buff->mapper == HIROM) { + //need to split page_num + //A15-8 page_num[7-0] + //A21-16 page_num[13-8] + //A22 high (HIROM) + //A23 ~page_num[14] (bank CO starts first half, bank 40 starts second) + bank = ((((buff->page_num)>>8) | 0x40) & 0x7F); + } + HADDR_SET( bank ); write_page_snes( 0, addrH, buff, snes_rom_wr, snes_rom_rd ); case SNESRAM: //warn addrX = ((buff->page_num)>>8); diff --git a/firmware/source/gameboy.c b/firmware/source/gameboy.c new file mode 100644 index 0000000..5d66c32 --- /dev/null +++ b/firmware/source/gameboy.c @@ -0,0 +1,59 @@ +#include "gameboy.h" + +//================================================================================================= +// +// GAMEBOY operations +// This file includes all the gameboy functions possible to be called from the gameboy dictionary. +// +// See description of the commands contained here in shared/shared_dictionaries.h +// +//================================================================================================= + +/* Desc:Function takes an opcode which was transmitted via USB + * then decodes it to call designated function. + * shared_dict_gameboy.h is used in both host and fw to ensure opcodes/names align + * Pre: Macros must be defined in firmware pinport.h + * opcode must be defined in shared_dict_gameboy.h + * Post:function call complete. + * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem. + */ +uint8_t gameboy_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ) +{ + +#define RD_LEN 0 +#define RD0 1 +#define RD1 2 + +#define BYTE_LEN 1 +#define HWORD_LEN 2 + + switch (opcode) { +// //no return value: + case DMG_WR: + dmg_wr( operand, miscdata ); + break; + + //8bit return values: + case DMG_RD: + rdata[RD_LEN] = BYTE_LEN; + rdata[RD0] = dmg_rd( operand ); + break; + default: + //macro doesn't exist + return ERR_UNKN_GAMEBOY_OPCODE; + } + + return SUCCESS; + +} + +uint8_t dmg_rd( uint16_t addr ) +{ + return 0xAA; +} + + +void dmg_wr( uint16_t addr, uint8_t data ) +{ + return; +} diff --git a/firmware/source/gameboy.h b/firmware/source/gameboy.h new file mode 100644 index 0000000..b2f111d --- /dev/null +++ b/firmware/source/gameboy.h @@ -0,0 +1,13 @@ +#ifndef _gameboy_h +#define _gameboy_h + +#include "pinport.h" +#include "shared_dictionaries.h" +#include "shared_errors.h" + +uint8_t gameboy_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); + +uint8_t dmg_rd( uint16_t addr ); +void dmg_wr( uint16_t addr, uint8_t data ); + +#endif diff --git a/firmware/source/gba.c b/firmware/source/gba.c new file mode 100644 index 0000000..11ea1f7 --- /dev/null +++ b/firmware/source/gba.c @@ -0,0 +1,59 @@ +#include "gba.h" + +//================================================================================================= +// +// GBA operations +// This file includes all the gba functions possible to be called from the gba dictionary. +// +// See description of the commands contained here in shared/shared_dictionaries.h +// +//================================================================================================= + +/* Desc:Function takes an opcode which was transmitted via USB + * then decodes it to call designated function. + * shared_dict_gba.h is used in both host and fw to ensure opcodes/names align + * Pre: Macros must be defined in firmware pinport.h + * opcode must be defined in shared_dict_gba.h + * Post:function call complete. + * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem. + */ +uint8_t gba_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ) +{ + +#define RD_LEN 0 +#define RD0 1 +#define RD1 2 + +#define BYTE_LEN 1 +#define HWORD_LEN 2 + + switch (opcode) { +// //no return value: + case GBA_WR: + gba_wr( operand, miscdata ); + break; + + //8bit return values: + case GBA_RD: + rdata[RD_LEN] = BYTE_LEN; + rdata[RD0] = gba_rd( operand ); + break; + default: + //macro doesn't exist + return ERR_UNKN_GBA_OPCODE; + } + + return SUCCESS; + +} + +uint8_t gba_rd( uint16_t addr ) +{ + return 0xAA; +} + + +void gba_wr( uint16_t addr, uint8_t data ) +{ + return; +} diff --git a/firmware/source/gba.h b/firmware/source/gba.h new file mode 100644 index 0000000..ee6f930 --- /dev/null +++ b/firmware/source/gba.h @@ -0,0 +1,13 @@ +#ifndef _gba_h +#define _gba_h + +#include "pinport.h" +#include "shared_dictionaries.h" +#include "shared_errors.h" + +uint8_t gba_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); + +uint8_t gba_rd( uint16_t addr ); +void gba_wr( uint16_t addr, uint8_t data ); + +#endif diff --git a/firmware/source/main.c b/firmware/source/main.c index f658fa4..17ef5b5 100644 --- a/firmware/source/main.c +++ b/firmware/source/main.c @@ -2,6 +2,7 @@ #include "usb.h" #include "io.h" #include "buffer.h" +#include "bootload.h" #include "jtag.h" #ifdef AVR_CORE @@ -53,6 +54,15 @@ int main(void) #endif #ifdef STM_CORE + + //remap system memory (including vector table) +// SYSCFG->CFGR1 = 0x00000002; //boot value (BOOT1:0 = 0b10 +// SYSCFG->CFGR1 = 0x00000001; //map sysmem bootloader to 0x00000000 + //SYSCFG->CFGR1 |= SYSCFG_CFGR1_MEM_MODE_ | 0x0001; + //jump to bootloader +// jump_to_bootloader(); +// jump_to_addr(0x1FFFC519); + //System is running at reset defaults //Default clock is in operation diff --git a/firmware/source/n64.c b/firmware/source/n64.c new file mode 100644 index 0000000..6dcf567 --- /dev/null +++ b/firmware/source/n64.c @@ -0,0 +1,59 @@ +#include "n64.h" + +//================================================================================================= +// +// N64 operations +// This file includes all the n64 functions possible to be called from the n64 dictionary. +// +// See description of the commands contained here in shared/shared_dictionaries.h +// +//================================================================================================= + +/* Desc:Function takes an opcode which was transmitted via USB + * then decodes it to call designated function. + * shared_dict_n64.h is used in both host and fw to ensure opcodes/names align + * Pre: Macros must be defined in firmware pinport.h + * opcode must be defined in shared_dict_n64.h + * Post:function call complete. + * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem. + */ +uint8_t n64_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ) +{ + +#define RD_LEN 0 +#define RD0 1 +#define RD1 2 + +#define BYTE_LEN 1 +#define HWORD_LEN 2 + + switch (opcode) { +// //no return value: + case N64_WR: + n64_wr( operand, miscdata ); + break; + + //8bit return values: + case N64_RD: + rdata[RD_LEN] = BYTE_LEN; + rdata[RD0] = n64_rd( operand ); + break; + default: + //macro doesn't exist + return ERR_UNKN_N64_OPCODE; + } + + return SUCCESS; + +} + +uint8_t n64_rd( uint16_t addr ) +{ + return 0xAA; +} + + +void n64_wr( uint16_t addr, uint8_t data ) +{ + return; +} diff --git a/firmware/source/n64.h b/firmware/source/n64.h new file mode 100644 index 0000000..f09dcb4 --- /dev/null +++ b/firmware/source/n64.h @@ -0,0 +1,13 @@ +#ifndef _n64_h +#define _n64_h + +#include "pinport.h" +#include "shared_dictionaries.h" +#include "shared_errors.h" + +uint8_t n64_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); + +uint8_t n64_rd( uint16_t addr ); +void n64_wr( uint16_t addr, uint8_t data ); + +#endif diff --git a/firmware/source/nes.c b/firmware/source/nes.c index da66f4b..b11cf79 100644 --- a/firmware/source/nes.c +++ b/firmware/source/nes.c @@ -32,6 +32,9 @@ uint8_t nes_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *r case DISCRETE_EXP0_PRGROM_WR: discrete_exp0_prgrom_wr( operand, miscdata ); break; + case DISC_PUSH_EXP0_PRGROM_WR: + disc_push_exp0_prgrom_wr( operand, miscdata ); + break; case NES_PPU_WR: nes_ppu_wr( operand, miscdata ); break; @@ -113,6 +116,24 @@ void discrete_exp0_prgrom_wr( uint16_t addr, uint8_t data ) } +//like above, but push on EXP0 instead of pullup +void disc_push_exp0_prgrom_wr( uint16_t addr, uint8_t data ) +{ + ADDR_SET(addr); + + DATA_OP(); + DATA_SET(data); + + EXP0_OP(); //Tas = 0ns, Tah = 30ns + EXP0_LO(); + //EXP0_IP_PU(); //Twp = 40ns, Tds = 40ns, Tdh = 0ns + EXP0_HI(); //Twp = 40ns, Tds = 40ns, Tdh = 0ns + //16Mhz avr clk = 62.5ns period guarantees timing reqts + DATA_IP(); +} + + + /* Desc: Discrete board MAPPER write without bus conflicts * will also write to PRG-ROM, but PRG-ROM shouldn't output * data while writting to mapper. Thus removing need for bank table. diff --git a/firmware/source/nes.h b/firmware/source/nes.h index c18a9e7..6ffc666 100644 --- a/firmware/source/nes.h +++ b/firmware/source/nes.h @@ -9,6 +9,7 @@ uint8_t nes_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); void discrete_exp0_prgrom_wr( uint16_t addr, uint8_t data ); +void disc_push_exp0_prgrom_wr( uint16_t addr, uint8_t data ); //void discrete_exp0_mapper_wr( uint16_t addr, uint8_t data ); uint8_t emulate_nes_cpu_rd( uint16_t addr ); uint8_t nes_cpu_rd( uint16_t addr ); diff --git a/firmware/source/sega.c b/firmware/source/sega.c new file mode 100644 index 0000000..4421d15 --- /dev/null +++ b/firmware/source/sega.c @@ -0,0 +1,59 @@ +#include "sega.h" + +//================================================================================================= +// +// SEGA operations +// This file includes all the sega functions possible to be called from the sega dictionary. +// +// See description of the commands contained here in shared/shared_dictionaries.h +// +//================================================================================================= + +/* Desc:Function takes an opcode which was transmitted via USB + * then decodes it to call designated function. + * shared_dict_sega.h is used in both host and fw to ensure opcodes/names align + * Pre: Macros must be defined in firmware pinport.h + * opcode must be defined in shared_dict_sega.h + * Post:function call complete. + * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem. + */ +uint8_t sega_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ) +{ + +#define RD_LEN 0 +#define RD0 1 +#define RD1 2 + +#define BYTE_LEN 1 +#define HWORD_LEN 2 + + switch (opcode) { +// //no return value: + case SEGA_WR: + sega_wr( operand, miscdata ); + break; + + //8bit return values: + case SEGA_RD: + rdata[RD_LEN] = BYTE_LEN; + rdata[RD0] = sega_rd( operand ); + break; + default: + //macro doesn't exist + return ERR_UNKN_SEGA_OPCODE; + } + + return SUCCESS; + +} + +uint8_t sega_rd( uint16_t addr ) +{ + return 0xAA; +} + + +void sega_wr( uint16_t addr, uint8_t data ) +{ + return; +} diff --git a/firmware/source/sega.h b/firmware/source/sega.h new file mode 100644 index 0000000..2e0b5fc --- /dev/null +++ b/firmware/source/sega.h @@ -0,0 +1,13 @@ +#ifndef _sega_h +#define _sega_h + +#include "pinport.h" +#include "shared_dictionaries.h" +#include "shared_errors.h" + +uint8_t sega_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); + +uint8_t sega_rd( uint16_t addr ); +void sega_wr( uint16_t addr, uint8_t data ); + +#endif diff --git a/firmware/source/usb.c b/firmware/source/usb.c index 543966b..48df866 100644 --- a/firmware/source/usb.c +++ b/firmware/source/usb.c @@ -117,6 +117,22 @@ uint16_t usbFunctionSetup(uint8_t data[8]) { rv[RETURN_ERR_IDX] = snes_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); break; + case DICT_GAMEBOY: + rv[RETURN_ERR_IDX] = gameboy_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); + break; + + case DICT_GBA: + rv[RETURN_ERR_IDX] = gba_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); + break; + + case DICT_SEGA: + rv[RETURN_ERR_IDX] = sega_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); + break; + + case DICT_N64: + rv[RETURN_ERR_IDX] = n64_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); + break; + case DICT_SWIM: rv[RETURN_ERR_IDX] = swim_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); break; @@ -125,6 +141,14 @@ uint16_t usbFunctionSetup(uint8_t data[8]) { rv[RETURN_ERR_IDX] = jtag_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); break; + case DICT_BOOTLOAD: + rv[RETURN_ERR_IDX] = bootload_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); + break; + + case DICT_CICCOM: + rv[RETURN_ERR_IDX] = ciccom_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] ); + break; + case DICT_BUFFER: //just give buffer.c the setup packet and let it figure things out for itself diff --git a/firmware/source/usb.h b/firmware/source/usb.h index 9076bde..5f719f1 100644 --- a/firmware/source/usb.h +++ b/firmware/source/usb.h @@ -16,8 +16,14 @@ #include "io.h" #include "nes.h" #include "snes.h" +#include "gameboy.h" +#include "gba.h" +#include "sega.h" +#include "n64.h" #include "buffer.h" #include "swim.h" +#include "bootload.h" +#include "ciccom.h" #include "types.h" #include "shared_usb.h" #include "shared_errors.h" diff --git a/firmware/source_stm_only/stm_init.c b/firmware/source_stm_only/stm_init.c index 0eb8f01..1ff7aa4 100644 --- a/firmware/source_stm_only/stm_init.c +++ b/firmware/source_stm_only/stm_init.c @@ -57,7 +57,8 @@ void HardFault_Handler(void) #ifdef STM_INL6 #define XTAL_8Mhz #else //kaz6 prototype & stm adapter have 16Mhz xtal - #define XTAL_16Mhz + //#define XTAL_16Mhz + #define XTAL_8Mhz #endif void init_clock() { diff --git a/host/inlretro_commited.exe b/host/inlretro_commited.exe index 979b8f8..7e32094 100644 Binary files a/host/inlretro_commited.exe and b/host/inlretro_commited.exe differ diff --git a/host/scripts/app/ciccom.lua b/host/scripts/app/ciccom.lua new file mode 100644 index 0000000..73a3abd --- /dev/null +++ b/host/scripts/app/ciccom.lua @@ -0,0 +1,197 @@ + +-- create the module's table +local ciccom = {} + +-- import required modules +local dict = require "scripts.app.dict" + +-- file constants + +-- local functions +local function start( debug ) + + --CIC reset & clock needs to be low to start + dict.pinport( "CTL_OP", "AFL") + dict.pinport( "CTL_SET_LO", "AFL") --CIC RESET LOW + + dict.pinport( "CTL_OP", "GBP") + dict.pinport( "CTL_SET_LO", "GBP") --INL CIC DATA LOW + + +--[[ + --reset the stm8 and disable SWIM, to get CIC in known state + dict.io("SWIM_INIT", "SWIM_ON_A0") + if swim.start(true) then + swim.stop_and_reset() + else + print("fail to activate SWIM") + end + + --now the CIC should be restarting + --takes ~0.5msec for it to get through boot sequence + jtag.sleep(0.01) --10msec to be overly safe + --after that time it's waiting for a CIC reset pulse to wake it +--]] + + + + --CIC CLK needs to be low before taking CIC RESET HIGH + dict.pinport( "ADDR_ENABLE") + dict.pinport( "ADDR_OP") + dict.pinport( "ADDR_SET", 0) --CIC CLK LOW (A0) + + --reset CIC by making it panic +-- dict.pinport( "CTL_SET_HI", "AFL") +-- dict.pinport( "CTL_SET_LO", "AFL") +-- rv = 2000 +-- while rv ~= 0 do +-- dict.pinport( "ADDR_SET", 1) --CIC CLK +-- dict.pinport( "ADDR_SET", 0) --CIC CLK +-- rv = rv -1 +-- end + + + dict.pinport( "ADDR_SET", 0) --CIC CLK + dict.pinport( "CTL_SET_HI", "AFL") + + --CIC is now waiting for data to be clocked in using CIC CLK & KEY_DATA_OUT + + + return +end + +local function set_opcode(opcode) + + --KEY DATA IN is clocked in on rising edges of CIC CLK + --"M" 0x4D (0b0100_1101 needs to be written to CIC to cause it to toggle mirroring + --MSbit is latched first + + if opcode == "M" then + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + end + + --now that "M" is written to CIC, end OPCODE write sequence by taking CIC RESET LO + dict.pinport( "CTL_SET_LO", "AFL") + + +end + + +local function write(data) + + --now send operand "V" (0x56) or "H" (0x48) + + if data == "H" then + --HORIZONTAL + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + elseif data == "V" then + + --VERTICAL + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_HI", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + + dict.pinport( "CTL_SET_LO", "GBP") + dict.pinport( "ADDR_SET", 1) + dict.pinport( "ADDR_SET", 0) + end + +end + + + +-- global variables so other modules can use them + + +-- call functions desired to run when script is called/imported + + +-- functions other modules are able to call +ciccom.start = start +ciccom.set_opcode = set_opcode +ciccom.write = write +ciccom.wotf = wotf +ciccom.rotf = rotf + +-- return the module's table +return ciccom diff --git a/host/scripts/app/dict.lua b/host/scripts/app/dict.lua index cae5715..c24594b 100644 --- a/host/scripts/app/dict.lua +++ b/host/scripts/app/dict.lua @@ -361,6 +361,213 @@ local function snes( opcode, operand, misc, data ) end +end + +-- external call for gameboy dictionary +local function gameboy( opcode, operand, misc, data ) + + if not op_gameboy[opcode] then + print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_gameboy.h") + return nil + end + + if not operand then + operand = 0 + elseif type(operand) == "string" then + if not op_gameboy[operand] then + print("ERROR undefined operand:", operand, "must be defined in shared_dict_gameboy.h") + return nil + end + --decode string operands into + operand = op_gameboy[operand] + end + + if not misc then misc = 0 end + + local wLength, ep = default_rlen_1_in(op_gameboy[opcode.."rlen"]) + + local count + count, data = usb_vend_xfr( + -- ep, dictionary wValue[misc:opcode] wIndex wLength data + ep, dict["DICT_GAMEBOY"], ( misc<<8 | op_gameboy[opcode]), operand, wLength, data) + --print(count) + local error_code, data_len + if ep == USB_IN then + error_code = data:byte(RETURN_ERR_IDX) + data_len = data:byte(RETURN_LEN_IDX) + end + --print("error:", error_code, "data_len:", data_len) + + assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code) + + if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then + print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX) + end + + --process the return data string and return it to calling function + if data_len then + return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len) + else + return nil + end + + +end + + +-- external call for gba dictionary +local function gba( opcode, operand, misc, data ) + + if not op_gba[opcode] then + print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_gba.h") + return nil + end + + if not operand then + operand = 0 + elseif type(operand) == "string" then + if not op_gba[operand] then + print("ERROR undefined operand:", operand, "must be defined in shared_dict_gba.h") + return nil + end + --decode string operands into + operand = op_gba[operand] + end + + if not misc then misc = 0 end + + local wLength, ep = default_rlen_1_in(op_gba[opcode.."rlen"]) + + local count + count, data = usb_vend_xfr( + -- ep, dictionary wValue[misc:opcode] wIndex wLength data + ep, dict["DICT_GBA"], ( misc<<8 | op_gba[opcode]), operand, wLength, data) + --print(count) + local error_code, data_len + if ep == USB_IN then + error_code = data:byte(RETURN_ERR_IDX) + data_len = data:byte(RETURN_LEN_IDX) + end + --print("error:", error_code, "data_len:", data_len) + + assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code) + + if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then + print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX) + end + + --process the return data string and return it to calling function + if data_len then + return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len) + else + return nil + end + + +end + + +-- external call for sega dictionary +local function sega( opcode, operand, misc, data ) + + if not op_sega[opcode] then + print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_sega.h") + return nil + end + + if not operand then + operand = 0 + elseif type(operand) == "string" then + if not op_sega[operand] then + print("ERROR undefined operand:", operand, "must be defined in shared_dict_sega.h") + return nil + end + --decode string operands into + operand = op_sega[operand] + end + + if not misc then misc = 0 end + + local wLength, ep = default_rlen_1_in(op_sega[opcode.."rlen"]) + + local count + count, data = usb_vend_xfr( + -- ep, dictionary wValue[misc:opcode] wIndex wLength data + ep, dict["DICT_SEGA"], ( misc<<8 | op_sega[opcode]), operand, wLength, data) + --print(count) + local error_code, data_len + if ep == USB_IN then + error_code = data:byte(RETURN_ERR_IDX) + data_len = data:byte(RETURN_LEN_IDX) + end + --print("error:", error_code, "data_len:", data_len) + + assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code) + + if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then + print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX) + end + + --process the return data string and return it to calling function + if data_len then + return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len) + else + return nil + end + + +end + + +-- external call for n64 dictionary +local function n64( opcode, operand, misc, data ) + + if not op_n64[opcode] then + print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_n64.h") + return nil + end + + if not operand then + operand = 0 + elseif type(operand) == "string" then + if not op_n64[operand] then + print("ERROR undefined operand:", operand, "must be defined in shared_dict_n64.h") + return nil + end + --decode string operands into + operand = op_n64[operand] + end + + if not misc then misc = 0 end + + local wLength, ep = default_rlen_1_in(op_n64[opcode.."rlen"]) + + local count + count, data = usb_vend_xfr( + -- ep, dictionary wValue[misc:opcode] wIndex wLength data + ep, dict["DICT_N64"], ( misc<<8 | op_n64[opcode]), operand, wLength, data) + --print(count) + local error_code, data_len + if ep == USB_IN then + error_code = data:byte(RETURN_ERR_IDX) + data_len = data:byte(RETURN_LEN_IDX) + end + --print("error:", error_code, "data_len:", data_len) + + assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code) + + if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then + print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX) + end + + --process the return data string and return it to calling function + if data_len then + return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len) + else + return nil + end + + end -- external call for swim dictionary @@ -471,6 +678,112 @@ local function jtag( opcode, operand, misc, data ) end +-- external call for bootload dictionary +local function bootload( opcode, operand, misc, data ) + + if not op_bootload[opcode] then + print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_bootload.h") + return nil + end + + if not operand then + operand = 0 + elseif type(operand) == "string" then + if not op_bootload[operand] then + print("ERROR undefined operand:", operand, "must be defined in shared_dict_bootload.h") + return nil + end + --decode string operands into + operand = op_bootload[operand] + end + + if not misc then misc = 0 end + + local wLength, ep = default_rlen_1_in(op_bootload[opcode.."rlen"]) + + local count + count, data = usb_vend_xfr( + -- ep, dictionary wValue[misc:opcode] wIndex wLength data + ep, dict["DICT_BOOTLOAD"], ( misc<<8 | op_bootload[opcode]), operand, wLength, data) + --print(count) + local error_code, data_len + if ep == USB_IN then + error_code = data:byte(RETURN_ERR_IDX) + data_len = data:byte(RETURN_LEN_IDX) + end + --print("error:", error_code, "data_len:", data_len) + + assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code) + + if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then + print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX) + end + + --process the return data string and return it to calling function + if data_len then + return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len) + else + return nil + end + + + +end + + +-- external call for ciccom dictionary +local function ciccom( opcode, operand, misc, data ) + + if not op_ciccom[opcode] then + print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_ciccom.h") + return nil + end + + if not operand then + operand = 0 + elseif type(operand) == "string" then + if not op_ciccom[operand] then + print("ERROR undefined operand:", operand, "must be defined in shared_dict_ciccom.h") + return nil + end + --decode string operands into + operand = op_ciccom[operand] + end + + if not misc then misc = 0 end + + local wLength, ep = default_rlen_1_in(op_ciccom[opcode.."rlen"]) + + local count + count, data = usb_vend_xfr( + -- ep, dictionary wValue[misc:opcode] wIndex wLength data + ep, dict["DICT_CICCOM"], ( misc<<8 | op_ciccom[opcode]), operand, wLength, data) + --print(count) + local error_code, data_len + if ep == USB_IN then + error_code = data:byte(RETURN_ERR_IDX) + data_len = data:byte(RETURN_LEN_IDX) + end + --print("error:", error_code, "data_len:", data_len) + + assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code) + + if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then + print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX) + end + + --process the return data string and return it to calling function + if data_len then + return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len) + else + return nil + end + + + +end + + local function buffer_payload_in( wLength, buff_num ) @@ -646,8 +959,14 @@ op_io = {} op_operation = {} op_nes = {} op_snes = {} +op_gameboy = {} +op_gba = {} +op_sega = {} +op_n64 = {} op_swim = {} op_jtag = {} +op_bootload = {} +op_ciccom = {} err_codes = {} -- Dictionary table definitions initialized by calling parser @@ -659,8 +978,14 @@ create_dict_tables( op_io, "../shared/shared_dict_io.h") create_dict_tables( op_operation, "../shared/shared_dict_operation.h") create_dict_tables( op_nes, "../shared/shared_dict_nes.h") create_dict_tables( op_snes, "../shared/shared_dict_snes.h") +create_dict_tables( op_gameboy, "../shared/shared_dict_gameboy.h") +create_dict_tables( op_gba, "../shared/shared_dict_gba.h") +create_dict_tables( op_sega, "../shared/shared_dict_sega.h") +create_dict_tables( op_n64, "../shared/shared_dict_n64.h") create_dict_tables( op_swim, "../shared/shared_dict_swim.h") create_dict_tables( op_jtag, "../shared/shared_dict_jtag.h") +create_dict_tables( op_bootload,"../shared/shared_dict_bootload.h") +create_dict_tables( op_ciccom, "../shared/shared_dict_ciccom.h") create_dict_tables( err_codes, "../shared/shared_errors.h") -- functions other modules are able to call @@ -668,8 +993,14 @@ dict.pinport = pinport dict.io = io dict.nes = nes dict.snes = snes +dict.gameboy = gameboy +dict.gba = gba +dict.sega = sega +dict.n64 = n64 dict.swim = swim dict.jtag = jtag +dict.bootload = bootload +dict.ciccom = ciccom dict.buffer = buffer dict.buffer_payload_in = buffer_payload_in dict.buffer_payload_out = buffer_payload_out diff --git a/host/scripts/app/swim.lua b/host/scripts/app/swim.lua index cdee43d..fb80e39 100644 --- a/host/scripts/app/swim.lua +++ b/host/scripts/app/swim.lua @@ -317,7 +317,8 @@ local function read_stack() --STM8 stack starts at $0200 which is where the CIC version --and other special data is placed starting with v2.0 local stack_start = 0x0200 - local last_char = 73 +-- local last_char = 73 --73 end of copyright + local last_char = 74 --mirroring bit local ack local data = {} @@ -331,6 +332,7 @@ local function read_stack() local j = 1 while data[j] do io.write(string.char(data[j])) + --io.write("B-",j,"=",data[j], " ") j = j+1 end print("\n") @@ -342,7 +344,7 @@ end -local function start( debug ) +local function start( debug, noreset ) --dict.io("IO_RESET") @@ -376,8 +378,15 @@ local function start( debug ) --by default there is now a breakpoint set at reset vector --reset the STM8 core --- dict.swim("SWIM_SRST") - system_reset( true ) + dict.swim("SWIM_SRST") + --optionally reset core below, but not of much use since a ROP enabled device + --will reset once SWIM comms initiate rotf/wotf + --if(noreset ~= true) then + -- if debug then print("RESETTING STM8 CPU") end + -- system_reset( true ) + --else + -- if debug then print("STM8 CPU WASN'T reset during activation") end + --end --the STM8 core is now stalled @ reset vector --can read/write to any address on STM8 core @@ -401,6 +410,7 @@ local function start( debug ) return true end + local function printCSR() print(cur_CSR) end diff --git a/host/scripts/inlretro.lua b/host/scripts/inlretro.lua index 9d6bef8..10be91c 100644 --- a/host/scripts/inlretro.lua +++ b/host/scripts/inlretro.lua @@ -12,11 +12,17 @@ function main () local cart = require "scripts.app.cart" local nes = require "scripts.app.nes" local snes = require "scripts.app.snes" +-- local gameboy = require "scripts.app.gameboy" +-- local gba = require "scripts.app.gba" +-- local sega = require "scripts.app.sega" +-- local n64 = require "scripts.app.n64" local dump = require "scripts.app.dump" local erase = require "scripts.app.erase" local flash = require "scripts.app.flash" local swim = require "scripts.app.swim" local jtag = require "scripts.app.jtag" + local ciccom = require "scripts.app.ciccom" +-- local bootload = require "scripts.app.bootload" -- local crc32 = require "scripts.app.crc32" @@ -25,7 +31,7 @@ function main () --local curcart = require "scripts.nes.mmc1" --local curcart = require "scripts.nes.unrom" --local curcart = require "scripts.nes.mm2" - --local curcart = require "scripts.nes.mapper30" + local curcart = require "scripts.nes.mapper30" --local curcart = require "scripts.nes.bnrom" --local curcart = require "scripts.nes.cdream" --local curcart = require "scripts.nes.cninja" @@ -33,7 +39,7 @@ function main () --local curcart = require "scripts.nes.action53_tsop" --local curcart = require "scripts.nes.easyNSF" --local curcart = require "scripts.nes.dualport" - local curcart = require "scripts.snes.v3" + --local curcart = require "scripts.snes.v3" local rv -- rv = dict.pinport( "DATA_SET", 0xAA ) @@ -65,6 +71,19 @@ function main () -- print(dict.io("EXP0_PULLUP_TEST")) -- + --BOOTLOADER TEST + --print("jumping...") + + --jump to 0xDEADBEEF + --dict.bootload("LOAD_ADDRH", 0xDEAD) + --dict.bootload("JUMP_ADDR", 0xBEEF) --for ARM LSbit must be odd (Thumb mode) +-- dict.bootload("LOAD_ADDRH", 0x1FFF) +-- dict.bootload("JUMP_ADDR", 0xCAC5) +-- dict.bootload("LOAD_ADDRH", 0x0800) +-- dict.bootload("JUMP_ADDR", 0x00C1) + + --dict.bootload("JUMP_BL") + --print("jumped") -- debug = true -- rv = cart.detect(debug) @@ -78,16 +97,17 @@ function main () --PROCESS USER ARGS ON WHAT IS TO BE DONE WITH CART local force_cart = true - cart_console = "SNES" + cart_console = "NES" if (force_cart or cart.detect_console(true)) then if cart_console == "NES" or cart_console == "Famicom" then dict.io("IO_RESET") dict.io("NES_INIT") - --[[ + ---[[ --NES detect mirroring to gain mapper info nes.detect_mapper_mirroring(true) + --[[ --NES detect memories to gain more mapper/board info --check for CHR-RAM nes.ppu_ram_sense(0x1000, true) @@ -159,9 +179,27 @@ function main () --]] - --[[ + ---[[ + + + ciccom.start() + ciccom.set_opcode("M") + --now send operand "V" (0x56) or "H" (0x48) + ciccom.write("H") + + + + dict.io("IO_RESET") + jtag.sleep(0.01) --10msec to be overly safe + + + ---[[ + --the CIC won't update the H/V stack flag unless it's reset + --reset caused during swim init doesn't count either bc it halts at reset vector + --test reading back CIC version dict.io("SWIM_INIT", "SWIM_ON_A0") + --dict.io("SWIM_INIT", "SWIM_ON_EXP0") if swim.start(true) then swim.read_stack() @@ -169,6 +207,7 @@ function main () else print("ERROR trying to read back CIC signature stack data") end + swim.stop_and_reset() print("done reading STM8 stack on A0\n") @@ -190,6 +229,7 @@ function main () --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/Zelda2.bin", "ignore/verifyout.bin") --UxROM + --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/AFB_128.prg", "ignore/verifyout.bin") --curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/nomolosFINAL.prg", "ignore/verifyout.bin") --curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/owlia_revb.prg", "ignore/verifyout.bin") --curcart.process( true, false, false, false, false, "ignore/dump.bin", "ignore/rushnattack.prg", "ignore/verifyout.bin") @@ -200,7 +240,9 @@ function main () --curcart.process( true, true, false, false, false, "ignore/dump.bin", "ignore/mm2_i0.prg", "ignore/verifyout.bin") --UNROM512 mapper 30 - --curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/MysticOrigins.prg", "ignore/verifyout.bin") + --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/BBC_nonJW.bin", "ignore/verifyout.bin") + curcart.process( true, false, false, false, false, "ignore/dump.bin", "ignore/MysticOrigins.prg", "ignore/verifyout.bin") + --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/NESmaker.nes", "ignore/verifyout.bin") --curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/tb_map30.prg", "ignore/verifyout.bin") @@ -266,8 +308,9 @@ function main () --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/MMXdump.bin", "ignore/verifyout.bin") --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/smw.sfc", "ignore/verifyout.bin") --curcart.process( true, true, false, false, false, "ignore/dump.bin", "ignore/hsbm_4Mbit_Lo.sfc", "ignore/verifyout.bin") - curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_4Mbit_Lo.sfc", "ignore/verifyout.bin") + --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_4Mbit_Lo.sfc", "ignore/verifyout.bin") --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_4Mbit_Hi.sfc", "ignore/verifyout.bin") + curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_32Mbit_Hi.sfc", "ignore/verifyout.bin") -- --old SNES code diff --git a/host/scripts/nes/action53_tsop.lua b/host/scripts/nes/action53_tsop.lua index cf7b808..6b8e064 100644 --- a/host/scripts/nes/action53_tsop.lua +++ b/host/scripts/nes/action53_tsop.lua @@ -138,7 +138,7 @@ local function write_gift(base, off) --local msg1 = "Regular Edition" --local msg1 = "Contributor Edition" local msg1 = "Limited Edition" - local msg2 = "100 of 100" -- all flashed + local msg2 = "82 of 100" -- all flashed --local msg1 = " Contributor Edition " --local msg2 = " PinoBatch " --issue if capital P or R is first char for some reason.. diff --git a/host/scripts/nes/mapper30.lua b/host/scripts/nes/mapper30.lua index 1e8a87e..9c3b4b3 100644 --- a/host/scripts/nes/mapper30.lua +++ b/host/scripts/nes/mapper30.lua @@ -51,6 +51,9 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, local rv = nil local file + local size = 512 + --local filetype = "nes" + local filetype = "bin" --initialize device i/o for NES dict.io("IO_RESET") @@ -58,11 +61,59 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, --test cart by reading manf/prod ID if test then + print("mapper 30") nes.detect_mapper_mirroring(true) nes.ppu_ram_sense(0x1000, true) print("EXP0 pull-up test:", dict.io("EXP0_PULLUP_TEST")) prgrom_manf_id( debug ) + + --test CHR-RAM banking + dict.nes("NES_CPU_WR", 0xC000, 0x00) --CHR bank 0 + dict.nes("NES_PPU_WR", 0x0000, 0xAA) + dict.nes("NES_CPU_WR", 0xC000, 0x20) --CHR bank 1 + dict.nes("NES_PPU_WR", 0x0000, 0x55) + dict.nes("NES_CPU_WR", 0xC000, 0x40) --CHR bank 2 + dict.nes("NES_PPU_WR", 0x0000, 0xCC) + dict.nes("NES_CPU_WR", 0xC000, 0x60) --CHR bank 3 + dict.nes("NES_PPU_WR", 0x0000, 0x33) + + --read back + local test = true + dict.nes("NES_CPU_WR", 0xC000, 0x00) --CHR bank 0 + rv = dict.nes("NES_PPU_RD", 0x0000) + if rv ~= 0xAA then + print( "\nFAIL CHR-RAM BANKING TEST!!!\n") + print("bank0 read:", string.format("%X", rv)) + test = false + end + dict.nes("NES_CPU_WR", 0xC000, 0x20) --CHR bank 1 + rv = dict.nes("NES_PPU_RD", 0x0000) + if rv ~= 0x55 then + print( "\nFAIL CHR-RAM BANKING TEST!!!\n") + print("bank1 read:", string.format("%X", rv)) + test = false + end + dict.nes("NES_CPU_WR", 0xC000, 0x40) --CHR bank 2 + rv = dict.nes("NES_PPU_RD", 0x0000) + if rv ~= 0xCC then + print( "\nFAIL CHR-RAM BANKING TEST!!!\n") + print("bank2 read:", string.format("%X", rv)) + test = false + end + dict.nes("NES_CPU_WR", 0xC000, 0x60) --CHR bank 3 + rv = dict.nes("NES_PPU_RD", 0x0000) + if rv ~= 0x33 then + print( "\nFAIL CHR-RAM BANKING TEST!!!\n") + print("bank3 read:", string.format("%X", rv)) + test = false + end + + if test then + print("CHR-RAM BANKING TEST PASSED") + end + + end --dump the cart to dumpfile @@ -70,7 +121,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, file = assert(io.open(dumpfile, "wb")) --dump cart into file - dump.dumptofile( file, 512, "MAP30", "PRGROM", true ) + dump.dumptofile( file, size, "MAP30", "PRGROM", true ) --close file assert(file:close()) @@ -124,10 +175,26 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, file = assert(io.open(flashfile, "rb")) --determine if auto-doubling, deinterleaving, etc, --needs done to make board compatible with rom + + + if filetype == "nes" then + --advance past the 16byte header + --TODO set mirroring bit via ciccom + local buffsize = 1 + local byte + local count = 1 + + for byte in file:lines(buffsize) do + local data = string.unpack("B", byte, 1) + --print(string.format("%X", data)) + count = count + 1 + if count == 17 then break end + end + end --flash cart - flash.write_file( file, 512, "MAP30", "PRGROM", true ) + flash.write_file( file, size, "MAP30", "PRGROM", true ) --close file assert(file:close()) @@ -140,7 +207,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, file = assert(io.open(verifyfile, "wb")) --dump cart into file - dump.dumptofile( file, 512, "MAP30", "PRGROM", true ) + dump.dumptofile( file, size, "MAP30", "PRGROM", true ) --close file assert(file:close()) diff --git a/host/scripts/nes/unrom.lua b/host/scripts/nes/unrom.lua index 3dd0ba5..2925002 100644 --- a/host/scripts/nes/unrom.lua +++ b/host/scripts/nes/unrom.lua @@ -103,6 +103,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, local rv = nil local file + local size = 128 --initialize device i/o for NES dict.io("IO_RESET") @@ -125,7 +126,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, --TODO find bank table to avoid bus conflicts! --dump cart into file - dump.dumptofile( file, 512, "UxROM", "PRGROM", true ) + dump.dumptofile( file, size, "UxROM", "PRGROM", true ) --close file assert(file:close()) @@ -174,14 +175,16 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, --Nomolos' bank table is at $CC84 so hard code that for now --wr_bank_table(0xCC84, 32) --Owlia bank table - wr_bank_table(0xE473, 32) + --wr_bank_table(0xE473, 32) --rushnattack --wr_bank_table(0x8000, 8) --twindragons --wr_bank_table(0xC000, 32) + --Armed for Battle + wr_bank_table(0xFD69, 8) --flash cart - flash.write_file( file, 512, "UxROM", "PRGROM", true ) + flash.write_file( file, size, "UxROM", "PRGROM", true ) --close file assert(file:close()) @@ -194,7 +197,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, file = assert(io.open(verifyfile, "wb")) --dump cart into file - dump.dumptofile( file, 512, "UxROM", "PRGROM", true ) + dump.dumptofile( file, size, "UxROM", "PRGROM", true ) --close file assert(file:close()) diff --git a/host/scripts/snes/v3.lua b/host/scripts/snes/v3.lua index 319e0e0..ca9b7a0 100644 --- a/host/scripts/snes/v3.lua +++ b/host/scripts/snes/v3.lua @@ -113,12 +113,21 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, dict.io("IO_RESET") dict.io("SNES_INIT") +-- local snes_mapping = "LOROM" + local snes_mapping = "HIROM" +-- local rom_size = 512 +-- local rom_size = 1024 +-- local rom_size = 2048 + local rom_size = 4096 +-- local rom_size = 8192 +-- local rom_size = 12288 +-- local rom_size = 16384 + --test cart by reading manf/prod ID if test then --SNES detect HiROM or LoROM --nes.detect_mapper_mirroring(true) - local snes_mapping = "LOROM" --SNES detect if there's save ram and size --SNES detect if able to read flash ID's @@ -148,13 +157,13 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, --dump the cart to dumpfile if read then --initialize the mapper for dumping - init_mapper(debug) + --init_mapper(debug) file = assert(io.open(dumpfile, "wb")) --TODO find bank table to avoid bus conflicts! --dump cart into file - dump.dumptofile( file, 512, "LOROM", "SNESROM", true ) + dump.dumptofile( file, rom_size, snes_mapping, "SNESROM", true ) --close file assert(file:close()) @@ -215,7 +224,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, if program then --initialize the mapper for dumping - init_mapper(debug) + --init_mapper(debug) --open file file = assert(io.open(flashfile, "rb")) @@ -225,7 +234,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, --not susceptible to bus conflicts --flash cart - flash.write_file( file, 512, "LOROM", "SNESROM", true ) + flash.write_file( file, rom_size, snes_mapping, "SNESROM", true ) --close file assert(file:close()) @@ -238,7 +247,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile, file = assert(io.open(verifyfile, "wb")) --dump cart into file - dump.dumptofile( file, 512, "LOROM", "SNESROM", true ) + dump.dumptofile( file, rom_size, snes_mapping, "SNESROM", true ) --close file assert(file:close()) diff --git a/shared/shared_dict_bootload.h b/shared/shared_dict_bootload.h new file mode 100644 index 0000000..8c80620 --- /dev/null +++ b/shared/shared_dict_bootload.h @@ -0,0 +1,28 @@ +#ifndef _shared_dict_bootload_h +#define _shared_dict_bootload_h + +//define dictionary's reference number in the shared_dictionaries.h file +//then include this dictionary file in shared_dictionaries.h +//The dictionary number is literally used as usb transfer request field +//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields + + +//============================================================================================= +//============================================================================================= +// BOOTLOAD DICTIONARY +// +// opcodes contained in this dictionary must be implemented in firmware/source/bootload.c +// +//============================================================================================= +//============================================================================================= + + +//BOOTLOAD opcodes +#define JUMP_BL 1 //jump to the bootloader + +#define LOAD_ADDRH 2 //upper address of jump +#define JUMP_ADDR 3 //jump to address upper 16bit provided previous opcode + + + +#endif diff --git a/shared/shared_dict_buffer.h b/shared/shared_dict_buffer.h index 2e02d5b..fbc3fbb 100644 --- a/shared/shared_dict_buffer.h +++ b/shared/shared_dict_buffer.h @@ -152,6 +152,7 @@ #define FME7 69 //SUNSOFT-5 with synth #define HDIVER 78 #define DxROM 205 + #define MM2 253 #define DPROM 254 //just a random mapper number for whatever I need it for // UNKNOWN 255 don't assign to something meaningful //operand LSB mapper variant @@ -159,7 +160,10 @@ #define LOROM 0 - #define HIROM 1 + #define HIROM 1 //file starts at bank 40 and is mirrored to C0 + #define EXHIROM 2 //file starts at bank C0 + #define SOROM 3 //12MB star ocean mapping + //set function //miscdata: buffer number diff --git a/shared/shared_dict_ciccom.h b/shared/shared_dict_ciccom.h new file mode 100644 index 0000000..4726d47 --- /dev/null +++ b/shared/shared_dict_ciccom.h @@ -0,0 +1,21 @@ +#ifndef _shared_dict_ciccom_h +#define _shared_dict_ciccom_h + +//define dictionary's reference number in the shared_dictionaries.h file +//then include this dictionary file in shared_dictionaries.h +//The dictionary number is literally used as usb transfer request field +//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields + + +//============================================================================================= +//============================================================================================= +// CICCOM DICTIONARY +// +// opcodes contained in this dictionary must be implemented in firmware/source/ciccom.c +// +//============================================================================================= +//============================================================================================= + +#define CICCOM_INIT 0 + +#endif diff --git a/shared/shared_dict_gameboy.h b/shared/shared_dict_gameboy.h new file mode 100644 index 0000000..0b63438 --- /dev/null +++ b/shared/shared_dict_gameboy.h @@ -0,0 +1,24 @@ +#ifndef _shared_dict_gameboy_h +#define _shared_dict_gameboy_h + +//define dictionary's reference number in the shared_dictionaries.h file +//then include this dictionary file in shared_dictionaries.h +//The dictionary number is literally used as usb transfer request field +//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields + + +//============================================================================================= +//============================================================================================= +// GAMEBOY DICTIONARY +// +// opcodes contained in this dictionary must be implemented in firmware/source/gameboy.c +// +//============================================================================================= +//============================================================================================= + + +#define DMG_RD 0 //RL=3 return error code, data len = 1, 1 byte of data +#define DMG_WR 1 + + +#endif diff --git a/shared/shared_dict_gba.h b/shared/shared_dict_gba.h new file mode 100644 index 0000000..3c5b540 --- /dev/null +++ b/shared/shared_dict_gba.h @@ -0,0 +1,24 @@ +#ifndef _shared_dict_gba_h +#define _shared_dict_gba_h + +//define dictionary's reference number in the shared_dictionaries.h file +//then include this dictionary file in shared_dictionaries.h +//The dictionary number is literally used as usb transfer request field +//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields + + +//============================================================================================= +//============================================================================================= +// GBA (gameboy advance) DICTIONARY +// +// opcodes contained in this dictionary must be implemented in firmware/source/gba.c +// +//============================================================================================= +//============================================================================================= + + +#define GBA_RD 0 //RL=3 return error code, data len = 1, 1 byte of data +#define GBA_WR 1 + + +#endif diff --git a/shared/shared_dict_n64.h b/shared/shared_dict_n64.h new file mode 100644 index 0000000..a87c336 --- /dev/null +++ b/shared/shared_dict_n64.h @@ -0,0 +1,23 @@ +#ifndef _shared_dict_n64_h +#define _shared_dict_n64_h + +//define dictionary's reference number in the shared_dictionaries.h file +//then include this dictionary file in shared_dictionaries.h +//The dictionary number is literally used as usb transfer request field +//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields + + +//============================================================================================= +//============================================================================================= +// N64 DICTIONARY +// +// opcodes contained in this dictionary must be implemented in firmware/source/n64.c +// +//============================================================================================= +//============================================================================================= + + +#define N64_RD 0 //RL=3 return error code, data len = 1, 1 byte of data +#define N64_WR 1 + +#endif diff --git a/shared/shared_dict_nes.h b/shared/shared_dict_nes.h index b6c24c3..4492a3f 100644 --- a/shared/shared_dict_nes.h +++ b/shared/shared_dict_nes.h @@ -43,6 +43,8 @@ #define NES_DUALPORT_WR 0x05 +#define DISC_PUSH_EXP0_PRGROM_WR 0x06 + //============================================================================================= // OPCODES WITH OPERAND AND RETURN VALUE plus SUCCESS/ERROR_CODE //============================================================================================= diff --git a/shared/shared_dict_pinport.h b/shared/shared_dict_pinport.h index 3ece1b6..520bd5d 100644 --- a/shared/shared_dict_pinport.h +++ b/shared/shared_dict_pinport.h @@ -111,7 +111,7 @@ #define SWD_ 17 // PC18 "SWC" mcu debug #define C18_ 18 -// PC19 "AFL" flipflop addr expansion for FF0-7 +// PC19 "AFL" flipflop addr expansion for FF0-7 (also CIC RESET on NES) #define C19_ 19 #define AFL_ 19 // PC20 "COUT" CIC data out diff --git a/shared/shared_dict_sega.h b/shared/shared_dict_sega.h new file mode 100644 index 0000000..1544d56 --- /dev/null +++ b/shared/shared_dict_sega.h @@ -0,0 +1,23 @@ +#ifndef _shared_dict_sega_h +#define _shared_dict_sega_h + +//define dictionary's reference number in the shared_dictionaries.h file +//then include this dictionary file in shared_dictionaries.h +//The dictionary number is literally used as usb transfer request field +//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields + + +//============================================================================================= +//============================================================================================= +// SEGA (genesis/megadrive) DICTIONARY +// +// opcodes contained in this dictionary must be implemented in firmware/source/sega.c +// +//============================================================================================= +//============================================================================================= + +#define SEGA_RD 0 //RL=3 return error code, data len = 1, 1 byte of data +#define SEGA_WR 1 + + +#endif diff --git a/shared/shared_dictionaries.h b/shared/shared_dictionaries.h index e84c3c4..99cbf48 100644 --- a/shared/shared_dictionaries.h +++ b/shared/shared_dictionaries.h @@ -5,19 +5,110 @@ //these numbers literally sent in usb control transfer in request field //the included dictionaries define opcodes and operands contained in transfer wValue wIndex fields //they also define expected data buffer sizes and contents. + +//These dictionaries are imported to the device firmware at compile time +//The host application loads & parses these dictionaries at run time +//So creation of new dictionaries/opcodes requires device firmware to +//be recompiled, and loaded onto the device. But the host application +//does not need to be recompiled. // -//TODO eventually the host code should have access to these libraries during run time. -//that way character strings can be interpreted by parsing the dictionary .h file -//this would also allow for dictionary expansion after compilation of host code. -//However the kazzo fw would still need rebuilt to support dictionary expansion. -//Possible to take this one step further and remove dictionaries from host compiliation. -//that way you simply point the host to a dictionary directory at runtime. -//Perhaps utilizing a database of some sort would be better than directory of text/.h files. -//but since firmware build relies on dictionary definition at build time, perhaps the simplest -//solution of using those avr build .h files slurped up by host at run time is safest and easiest. -//having host capability to convert command string to the usb dict/opcode is the first -//step in having scripting support on host side. The thought above just expands it one -//step further making the dictionaries themselves operate as run time 'scripts'. +// +//There are a number of updates that must be completed when creating new dictionaries: +// +//1: Define the dictionary number here in this file with #define & #include +// This will get the new dictionary included in the firmware build +// the assigned dictionary number must be between 0-255 +// This number is the actual USB bRequest value for the setup packet +// +//2: Create new "shared_dict_.h" file in the same directory as this file +// Feel free to copy paste a similar dict, just make sure everything is +// appropriately renamed in the file +// +//3: Add the new dictionary to host/scripts/app/dict.lua +// This includes instantiating, creating, & exporting the module at the bottom +// of dict.lua file as follows: +// op_ = {} +// create_dict_tables( op_, "../shared/shared_dict_.h") +// dict. = +// Create the dictionary function in dict.lua +// This is the function that the host scripts use each time an opcode is +// called for that dictionary. It designates how the operand, misc, & data +// for the opcode are defined and how they map to the USB setup & data packets. +// Currently there is no generic function for dictionaries to use +// This is because some dictionaries may handle USB transfers in special ways +// For now one can probably get by copy pasting one of the other functions +// like nes, and then renaming all "nes" to "" and "NES" to "" +// TODO: create generic dictionary script function for general use +// +//4: Define the desired opcodes in the newly created shared/shared_dict_.h file +// This is done with lines like the following: +// #define NEW_OPCODE 1 //RL=2 +// the opcode name comes first which is the name used to call the opcode +// This is used in host scripts and device firmware +// An underscore can be tacked to the end to allow direct mapping between +// firmware defines and shared defines (see firmware/source/pinport.h for example) +// In that case the trailing underscore is trimmed by the host parser +// choose an arbitrary number between 0-255 that is different from all other +// opcodes in that dictionary +// This value is sent as USB setup packet wValue LSByte +// the "RL=" that's follows the "//" C comment designates the "return data length" +// This C comment is for the host side only so it knows the desired USB endpoint & data length. +// If left out, the default is RL=1 which is ENDPOINT IN with data length of 1. +// A negative value for RL denotes ENDPOINT OUT (write to device). +// a positive is ENDPOINT IN (read data from device). +// That 1 byte of data read back from the device is typically the success/error +// code sent back from the device to denote if opcode wasn't found, or other problem. +// If you want some actual data to be returned increased. +// Typically the first byte is still reserved for error code, second byte gives data length +// of the data that follows. So 1 byte of return data would be RL=3 +// first byte would be errorcode, second = 1, and third byte would be actual data +// see nes.c for an example of this on reads +// You must also dictate what to do with that data once it arrives in the +// dict.lua function created in step 3 above. +// dict.lua parses this RL value, all that really matters is it follows // +// and contains RL= where the number is assumed decimal, but can be hex with 0x prefix +// white space is okay, and RL doesn't have to be first thing in the comment +// If one wants to comment out opcodes it must be done with // at the beginning of the line. +// multiline C comments is not permitted by the dict.lua parser +// Make notes about the opcode explaining operands and data when used. +// Comments in shared_dict_.h must be single line C comments starting with // +// +//5: Add support for the dictionary in the device +// This is done in firmware/source/usb.c within the usbFunctionSetup function +// This is where setup packet is mapped to the firmware function you'd like to be called for +// each incoming setup packet for this dictionary +// +//6: Create the firmware C code to implement the dictionary. +// Something like .c & .h which can be copied from a similar dictionary +// The .h file must be included in usb.h +// Create a _call function in .c which you called in step 6 above. +// Use a switch statement to key off the opcode and pass operands/data to the opcode's function +// Be sure to return SUCCESS/ERROR when possible to get some sort of report back from device that +// the opcode was found and executed properly. +// the return SUCCESS/ERROR is not possible when sending data packets to device (ENDPOINT OUT) +// in that case perhaps you want a 'GET_LAST_ERROR_CODE' opcode that would follow afterwards.. +// These error codes should be kept in shared/shared_errors.h +// +//7: Call opcodes in the new dictionary from host lua scripts! +// For example: +// dict.io("NES_INIT") +// calls the NES_INIT opcode in the io dictionary, this opcode happens to initialize +// the mcu GPIO pins to a known state to prepare for calling other opcodes in the nes dictionary +// +// dict.nes("NES_CPU_WR", 0x8000, 0xFF) +// calls the NES_CPU_WR opcode from the nes dictionary, with operand 0x8000, and miscdata 0xFF +// the host/scripts/app/dict.lua nes function is what determines how that operand/misc data is sent in the setup packet +// in this example the value 0xFF is written to CPU address $8000 +// +// dict.snes("SNES_SET_BANK", 0) +// rv = dict.snes("SNES_ROM_RD", 0xFFFF) +// the SNES_SET_BANK opcode sets the SNES bank address bits to 0 +// the second SNES_ROM_RD opcode reads the value from $FFFF (of the currently selected bank) +// and the read value is stored in the variable rv for use in the script +// +// hex & decimal values can be used in data, operands, misc. Hex must have 0x prefix +// this is lua code afterall, so anything that's possible in lua can be done here on the host side + //Notes: @@ -121,4 +212,62 @@ //dictionary used to control jtag communications //============================================================================================= //============================================================================================= + + +//============================================================================================= +//============================================================================================= +#define DICT_BOOTLOAD 10 +#include "shared_dict_bootload.h" +//dictionary used to control USB device bootloader +//============================================================================================= +//============================================================================================= + + +//============================================================================================= +//============================================================================================= +#define DICT_CICCOM 11 +#include "shared_dict_ciccom.h" +//dictionary used to communicate to the CIC +//The lockout microcontroller on some INL manufactured cartridges +//is used for advanced features such as mirroring software switch, JTAG interface, etc. +//============================================================================================= +//============================================================================================= + +//============================================================================================= +//============================================================================================= +#define DICT_GAMEBOY 12 +#include "shared_dict_gameboy.h" +//gameboy dictionary +//These commands rely on io initialization from io dictionary prior to calling +//============================================================================================= +//============================================================================================= + +//============================================================================================= +//============================================================================================= +#define DICT_GBA 13 +#include "shared_dict_gba.h" +//gameboy advance dictionary +//These commands rely on io initialization from io dictionary prior to calling +//============================================================================================= +//============================================================================================= + +//============================================================================================= +//============================================================================================= +#define DICT_SEGA 14 +#include "shared_dict_sega.h" +//Sega Genesis dictionary +//These commands rely on io initialization from io dictionary prior to calling +//============================================================================================= +//============================================================================================= + +//============================================================================================= +//============================================================================================= +#define DICT_N64 15 +#include "shared_dict_n64.h" +//Nintendo 64 dictionary +//These commands rely on io initialization from io dictionary prior to calling +//============================================================================================= +//============================================================================================= + + #endif diff --git a/shared/shared_errors.h b/shared/shared_errors.h index 5a21c8f..b35d7be 100644 --- a/shared/shared_errors.h +++ b/shared/shared_errors.h @@ -11,6 +11,8 @@ #define ERR_UNKN_SWIM_OPCODE 130 #define ERR_UNKN_JTAG_OPCODE 135 +#define ERR_UNKN_CICCOM_OPCODE 136 +#define ERR_UNKN_BOOTLOAD_OPCODE 138 #define ERR_UNKN_PP_OPCODE 140 #define ERR_CTL_PIN_NOT_PRESENT 141 @@ -25,6 +27,11 @@ // #define ERR_UNKN_SNES_OPCODE 170 +#define ERR_UNKN_GAMEBOY_OPCODE 175 +#define ERR_UNKN_GBA_OPCODE 176 +#define ERR_UNKN_SEGA_OPCODE 177 +#define ERR_UNKN_N64_OPCODE 178 + #define ERR_UNKN_BUFF_OPCODE 180 #define ERR_BUFN_DOES_NOT_EXIST 181